Thread
objetos pueden ser creados o devueltos porthreading.Thread()
, threading.getThread()
, threading.mainThread()
, ythreading.currentThread()
.
ElpeekMessage()
La función se utiliza para obtener un mensaje de un hilo.
ElpeekMessage()
función devuelve el mensaje recibido por el hilo asociado con el objeto de hilo actual.
cadena, número, bool, objeto, matriz, valor nulo y otros tipos compatibles con el sistema
PeekMensaje (() PeekMessage ((tiempo muerto)
El parámetrotimeout
es la configuración de tiempo de espera. Bloqueará y esperará el número de milisegundos establecidos por el parámetro y devolverá los datos. Si no hay datos y el tiempo de espera excede el límite, se devolverá un valor nulo. Sitimeout
se establece en 0 o eltimeout
si el parámetro no se pasa, significa que el proceso bloqueará y esperará hasta que se reciban los datos del canal.timeout
Si se establece en -1, significa que el proceso no bloqueará y devolverá datos de inmediato.
tiempo de espera falsos Número
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()
}
Envía mensajes al hilo principal desde un hilo concurrente.
Al escribir programas, necesitamos prestar atención a los problemas de cierre de hilo.
{@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/Thread/name name}, {@Threads/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop}, {@
ElpostMessage()
función se utiliza para enviar un mensaje a un hilo.
El mensaje es:
El parámetromsg
es el mensaje que se enviará.
mensaje de texto verdadero Cualquier tipo compatible con el sistema, como cadena, número, bool, objeto, matriz, función, valor nulo, etc.
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()
}
Enviar mensajes en hilos simultáneos y usareventLoop()
para recibir notificaciones de mensajes.
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()
}
Apoya el envío de una función.
Cuando una función de ejecución de threadpostMessage()
La función para enviar una señal o datos, un evento de mensaje también se genera.eventLoop()
Función para recibir notificaciones de mensajes.
{@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}
Eljoin()
Función utilizada para esperar a que el hilo salga y reclame recursos del sistema.
ElThreadRet
objetoscontiene datos sobre el resultado de la ejecución.
ThreadRet
objetos
¿Qué quieres decir? Unirse (tiempo muerto)
Eltimeout
Parámetro se utiliza para establecer el tiempo de espera en milisegundos para esperar a que el hilo para terminar.timeout
el parámetro se establece en 0 o eltimeout
el parámetro no está establecido, eljoin()
función bloqueará y esperar hasta que el hilo termine de ejecutar.timeout
el parámetro está establecido en -1, eljoin()
La función volverá inmediatamente.
tiempo de espera falsos Número
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}
}
Prueba eljoin()
Función de tiempo de espera y salida del valor de retorno.
Eljoin()
Tiempos de salida y retorno de la funciónundefined
.
{@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}
Elterminate()
La función se utiliza para terminar por la fuerza un hilo y liberar los recursos de hardware utilizados por el hilo creado.
Terminar el contrato
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)
}
}
Terminar la ejecución de un hilo con la fuerza Después de terminar un hilo con la fuerza, no habrá salida de este hilo en el registro.
Para los hilos que se terminan por la fuerza por elterminate()
La función, ya no podemos utilizar eljoin()
Función para esperar a que terminen.
{@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}
ElgetData()
Los datos son válidos cuando el hilo no ha ejecutado eljoin()
Función (en espera de exit exit) y no ha ejecutado elterminate()
Función (terminando el hilo por la fuerza).
ElgetData()
Función devuelve el valor clave correspondiente a lakey
Parámetro en el par clave-valor almacenado en el contexto del hilo actual.
cadena, número, bool, objeto, matriz, valor nulo y otros tipos compatibles con el sistema
- ¿Qué quieres decir? - ¿ Qué pasa?
Elkey
Parámetro es el nombre de la clave del par clave-valor almacenado.
llave verdadero la cuerda
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()
}
Registre el valor de la clavecount
en el entorno de hilo concurrente, y luego leer el valor clave decount
en el hilo principal.
{@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}
ElsetData()
La función se utiliza para almacenar variables en el contexto del hilo.
el conjunto de datos (clave, valor)
Elkey
El parámetro se utiliza para especificar el nombre de la clave del par clave-valor almacenado.
llave
verdadero
la cuerda
Elvalue
El parámetro se utiliza para especificar el valor de clave del par clave-valor almacenado.
Valor verdadero Cualquier tipo compatible con el sistema, como cadena, número, bool, objeto, matriz, función, valor nulo, etc.
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Sleep(1000)
Log(`t1.getData("data"):`, t1.getData("data"))
t1.join()
}
Establezca el par clave-valor en el hilo concurrente y lea el par clave-valor en el hilo principal.
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()
}
Apoya la transmisión de valores clave a funciones.
Los datos son válidos cuando el hilo no ha ejecutado eljoin()
Función (en espera de exit exit) y no ha ejecutado elterminate()
El valor del parámetrovalue
debe ser una variable serializable.
{@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/eventLoop eventLoop}
Elid()
función se utiliza para devolver elthreadId
de la instancia actual de objeto multithreaded.
El valor de retorno de laid()
la función esthreadId
.
Número
el número de identificación
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.id():`, t1.id())
t1.join()
}
Crear un hilo de ejecución simultánea y la salida de lathreadId
de este hilo concurrente en el hilo principal.
{@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}
Elname()
función se utiliza para devolver el nombre de la instancia de objeto multithreaded actual.
Elname()
función devuelve el nombre del hilo concurrente.
la cuerda
nombre ())
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.name():`, t1.name()) // t1.name(): Thread-1
t1.join()
}
Crea un hilo concurrente y saca el nombre del hilo concurrente en el hilo principal.
{@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/Thread/eventLoop eventLoop}
EleventLoop()
La función se utiliza para escuchar los eventos recibidos por el hilo.
EleventLoop()
función devuelve la información del evento recibido por el hilo actual.Estructura de la información del evento.
Objeto, valor cero
Loop de acontecimientos EventLoop (tiempo muerto)
El parámetrotimeout
es la configuración de tiempo de espera en milisegundos.timeout
Si el valor de un evento es igual a 0, esperará a que ocurra un evento antes de regresar. Si es mayor que 0, establecerá el tiempo de espera del evento. Si es menor que 0, devolverá el evento más reciente inmediatamente.
tiempo de espera falsos Número
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()
}
Ejecute tres hilos simultáneamente y saque la información del evento recibida.
El mecanismo de procesamiento de loseventLoop()
la función es la misma que la función globalEventLoop()
.
{@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/Thread/name name}
el hilo Enlace de hilo