Thread
объекты могут быть созданы или возвращеныthreading.Thread()
, threading.getThread()
, threading.mainThread()
, иthreading.currentThread()
.
В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()
}
Он поддерживает отправку функции.
Когда функция выполнения threadpostMessage()
Функция для отправки сигнала или данных, событие сообщения также генерируется.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
объектсодержит данные о результате выполнения.
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()
Данные действительны, когда нить не выполняет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 ((ключ, значение)
В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}
В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}
прокрутка Закрыть