В процессе загрузки ресурсов... загрузка...

Нить

Threadобъекты могут быть созданы или возвращеныthreading.Thread(), threading.getThread(), threading.mainThread(), иthreading.currentThread().

PeekСообщение

ВpeekMessage()Функция используется для получения сообщения из потока.

ВpeekMessage()функция возвращает сообщение, полученное нитью, связанной с текущим объектом нитки.

string, number, bool, object, array, null value и другие типы, поддерживаемые системой

Посмотреть сообщение (() PeekMessage ((Timeout) Посмотреть сообщение

ПараметрtimeoutЕсли нет данных и время задержки превышает предел, будет возвращено значение NULL.timeoutустанавливается на 0 илиtimeoutпараметр не будет передан, это означает, что процесс будет блокировать и ждать, пока данные не будут получены из канала.timeoutЕсли значение -1, это означает, что процесс не будет блокировать и возвращать данные немедленно. Если нет данных, будет возвращено значение нуль.

Тайм-аут ложное Номер

function main() {
    var t1 = threading.Thread(function() {
        for (var i = 0; i < 10; i++) {
            Log("thread1 postMessage():", i)
            threading.mainThread().postMessage(i)
            Sleep(500)
        }        
    })

    while (true) {
        var msg = threading.currentThread().peekMessage()
        Log("main peekMessage():", msg)
        if (msg == 9) {
            break
        }
        Sleep(1000)
    }

    t1.join()
}

Отправлять сообщения в главную нить из параллельной нитки.

Когда мы пишем программы, мы должны обращать внимание на проблемы с тупиком потоков.

{@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name}, {@Threads/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}

Послание

ВpostMessage()Функция используется для отправки сообщения в тему.

mailMessage(msg)

ПараметрmsgЭто послание, которое нужно отправить.

СМС Истинно Любой тип, поддерживаемый системой, например строка, число, bool, объект, массив, функция, нулевое значение и т. д.

function main() {
    var t1 = threading.Thread(function() {
        for (var i = 0; i < 10; i++) {
            Log("thread1 postMessage():", i)
            threading.mainThread().postMessage(i)
            Sleep(500)
        }        
    })
    for (var i = 0; i < 10; i++) {
        var event = threading.mainThread().eventLoop()
        Log("main event:", event)
        Sleep(500)
    }
    t1.join()
}

Отправка сообщений в одновременных потоках и использованиеeventLoop()чтобы получать уведомления о сообщениях.

function main() {
    threading.mainThread().postMessage(function(msg) {
        Log("func from mainThread, msg:", msg)
    })
    
    threading.Thread(function() {
        var func = threading.mainThread().peekMessage()
        func("in " + threading.currentThread().name())
    }).join()
}

Он поддерживает отправку функции.

Когда функция выполнения threads вызываетpostMessage()Функция для отправки сигнала или данных, событие сообщения также генерируется.eventLoop()функция получения уведомлений о сообщениях.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Threads/Thread/name}, {@fun/Threads/Thread/eventLoop eventLoop}

присоединяться

Вjoin()функция используется для ожидания выхода потока и восстановления системных ресурсов.

ВThreadRetобъектсодержит данные о результате выполнения.

  • ID: ID нитки.
  • terminated: если нить вынуждена закончиться.
  • прошедшее время: время прохождения нитки в наносекундах.
  • ret: возвращаемое значение функции "thread".

ThreadRetобъект

Присоединяйтесь. Присоединяйтесь (Timeout)

ВtimeoutПараметр используется для установки временного пребывания в миллисекундах для ожидания окончания потока.timeoutпараметр установлен на 0 илиtimeoutпараметр не установлен,join()функция будет блокировать и ждать, пока нить закончит выполнение.timeoutпараметр установлен на -1,join()Функция восстановится немедленно.

Тайм-аут ложное Номер

function main() {
    var t1 = threading.Thread(function() {
        Log("Hello thread1")
        Sleep(5000)
    })

    var ret = t1.join(1000)
    Log("ret:", ret)   // ret: undefined

    ret = t1.join()
    Log("ret:", ret)   // ret: {"id":1,"terminated":false,"elapsed":5003252000}
}

Проверитьjoin()Функция timeout и вывод возвращаемого значения.

Вjoin()время выхода и возвращения функцииundefined.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}

прекратить

Вterminate()функция используется для принудительного прекращения потока и освобождения аппаратных ресурсов, используемых созданным потоком.

прекратить ((()

function main() {
    var t1 = threading.Thread(function() {
        for (var i = 0; i < 10; i++) {
            Log("thread1 i:", i)
            Sleep(1000)
        }
    })

    Sleep(3000)
    t1.terminate()
    Log("after t1.terminate()")

    while (true) {
        LogStatus(_D())
        Sleep(1000)
    }
}

После принудительного прекращения действия потока не будет выхода из этого потока в журнале.

Для нитей, которые насильно заканчиваютсяterminate()Функция, мы больше не можем использоватьjoin()Функция ждать, пока они закончатся.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}

getData

ВgetData()Данные действительны, когда нить не выполняетjoin()Функция (в ожидании успешного выхода) и не выполнилаterminate()функцию (силовое прекращение нити).

ВgetData()Функция возвращает значение ключа, соответствующееkeyпараметр в паре ключей и значений, хранящийся в текущем контексте потока.

string, number, bool, object, array, null value и другие типы, поддерживаемые системой

getData ((() getData ((ключ)

Вkeyпараметр - это название ключа для сохраненной пары ключей и значений.

ключ неправда строка

function main() {
    var t1 = threading.Thread(function() {
        for (var i = 0; i < 5; i++) {
            threading.currentThread().setData("count", i)
            Log(`setData("count"):`, i)
            Sleep(1000)
        }
    })
    for (var i = 0; i < 5; i++) {
        var count = threading.getThread(t1.id()).getData("count")
        Log(`getData("count"):`, count)
        Sleep(1000)
    }
    t1.join()
}

Запишите значение ключаcountв одновременной среде нить, а затем читать ключевое значениеcountв главной нить.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name name}, {@fun/Threads/Thread/eventLoop eventLoop}

setData

ВsetData()функция используется для хранения переменных в контексте потока.

setData ((ключ, значение)

Вkeyпараметр используется для указания названия ключа для сохраненной пары ключей и значений.

ключ неправда строка Вvalueпараметр используется для указания значения ключа для сохраненной пары ключей и значений.

стоимость Истинно Любой тип, поддерживаемый системой, например строка, число, bool, объект, массив, функция, нулевое значение и т. д.

function main() {
    var t1 = threading.Thread(function() {
        threading.currentThread().setData("data", 100)
    })
    Sleep(1000)
    Log(`t1.getData("data"):`, t1.getData("data"))
    t1.join()
}

Установите пару ключей-значений в паре параллельных нитей и прочитайте пару ключей-значений в основной нитке.

function main() {
    threading.mainThread().setData("func2", function(p) {
        Log("func2 p:", p)
    })
    
    var t1 = threading.Thread(function() {
        threading.currentThread().setData("func1", function(p) {
            Log("func1 p:", p)
        })
    
        var func2 = threading.mainThread().getData("func2")
        func2("test2")
    })
    
    Sleep(1000)
    var func1 = t1.getData("func1")
    func1("test1")
    t1.join()
}

Он поддерживает передачу ключевых значений в функции.

Данные действительны, когда нить не выполняетjoin()Функция (в ожидании успешного выхода) и не выполнилаterminate()значение параметраvalueдолжна быть сериализируемой переменной.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Thread/Thread/eventLoop eventLoop}

Идентификатор

Вid()Функция используется для возвращенияthreadIdтекущего многопоточного объекта.

Доходное значениеid()функция -threadId.

Номер

id()

function main() {
    var t1 = threading.Thread(function() {
        threading.currentThread().setData("data", 100)
    })
    Log(`t1.id():`, t1.id())
    t1.join()
}

Создать параллельно работающий нить и вывестиthreadIdэтой параллельной нитью в основной нить.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}

Имя

Вname()функция используется для возвращения имени текущего многопоточного объекта.

Вname()Функция возвращает имя параллельной нитки.

строка

Имя ((()

function main() {
    var t1 = threading.Thread(function() {
        threading.currentThread().setData("data", 100)
    })
    Log(`t1.name():`, t1.name())  // t1.name(): Thread-1
    t1.join()
}

Создать параллельную нить и вывести имя параллельной нитки в основной нить.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}

событиеLoop

ВeventLoop()функция используется для прослушивания событий, полученных нитью.

ВeventLoop()функция возвращает информацию о событиях, полученную текущей нитью.Информационная структура событий.

объект, нулевое значение

СобытиеLoop() EventLoop ((Timeout))

Параметрtimeout- это настройка времени в миллисекундах. Если параметрtimeoutЕсли значение будет установлено на 0, оно будет ждать, пока произойдет событие, прежде чем возвращать. Если оно больше 0, оно будет устанавливать время ожидания события. Если оно меньше 0, оно немедленно вернет последнее событие.

Тайм-аут ложное Номер

function main() {
    var t1 = threading.Thread(function() {
        while (true) {
            var eventMsg = threading.currentThread().eventLoop()     // Blocking wait
            // 2024-11-14 10:14:18 thread1 eventMsg: {"Seq":1,"Event":"thread","ThreadId":0,"Index":1,"Queue":0,"Nano":1731550458699947000}
            Log(_D(), "thread1 eventMsg:", eventMsg)
        }
    })

    var t2 = threading.Thread(function() {
        while (true) {
            var eventMsg = threading.currentThread().eventLoop(-1)   // Return immediately
            Log(_D(), "thread2 eventMsg:", eventMsg)
            Sleep(5000)
        }
    })

    var t3 = threading.Thread(function() {
        while (true) {
            var eventMsg = threading.currentThread().eventLoop(3000) // Set a 3 second timeout
            Log(_D(), "thread3 eventMsg:", eventMsg)
        }
    })

    t1.postMessage("Hello ", t1.name())
    t2.postMessage("Hello ", t2.name())
    t3.postMessage("Hello ", t3.name())
    t1.join()
    t2.join()
    t3.join()
}

Используйте три потока одновременно и выводите полученную информацию о событии.

Механизм обработкиeventLoop()функция такая же, как и глобальная функцияEventLoop().

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Threads/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name}, {@fun/Threads/name name}

прокрутка Закрыть