Thread
objetos podem ser criados ou devolvidos porthreading.Thread()
, threading.getThread()
, threading.mainThread()
, ethreading.currentThread()
.
OpeekMessage()
função é usada para obter uma mensagem de um thread.
OpeekMessage()
função retorna a mensagem recebida pelo thread associado ao objeto do thread atual.
string, number, bool, object, array, null value e outros tipos suportados pelo sistema
PeekMessagem() PeekMessage ((timeout)
O parâmetrotimeout
é a definição de timeout. Ele irá bloquear e esperar o número de milissegundos definidos pelo parâmetro e retornar dados. Se não houver dados e o timeout exceder o limite, um valor nulo será devolvido. Setimeout
é definido como 0 ou otimeout
Parâmetro não é passado, significa que o processo irá bloquear e esperar até que os dados sejam recebidos do canal.timeout
se for definido em -1, significa que o processo não bloqueará e retornará dados imediatamente.
tempo de espera Falso 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()
}
Enviar mensagens para o tópico principal de um tópico concorrente.
Quando escrevemos programas, precisamos prestar atenção aos problemas de thread deadlock.
{@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}, {@Threads/Threads/eventLoop eventLoop}
OpostMessage()
função é usada para enviar uma mensagem para um tópico.
PostMessage ((msg)
O parâmetromsg
é a mensagem a ser enviada.
msg verdade Qualquer tipo suportado pelo sistema, como string, número, bool, objeto, matriz, função, 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 mensagens em tópicos simultâneos e usareventLoop()
para receber notificações de mensagens.
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()
}
Suporta enviar uma função.
Quando uma função de execução de threadpostMessage()
A função para enviar um sinal ou dados, um evento de mensagem também é gerado.eventLoop()
Função para receber notificações de mensagens.
{@fun/Threads/Thread/peekMessage peekMessage}, {@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 name}, {@fun/Threads/Thread/eventLoop eventLoop}
Ojoin()
A função é usada para esperar que o thread saia e recupere os recursos do sistema.
OThreadRet
Objetocontém dados sobre o resultado da execução. As propriedades incluem:
ThreadRet
Objeto
Junte-se. Participação (timeout)
Otimeout
O parâmetro é usado para definir o timeout em milissegundos para esperar que o fio termine.timeout
Parâmetro é definido em 0 ou otimeout
Parâmetro não definido, ojoin()
função irá bloquear e esperar até que o tópico terminar de executar.timeout
Parâmetro definido em -1, ojoin()
A função irá voltar imediatamente.
tempo de espera Falso 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}
}
Teste ojoin()
Função de timeout e saída do valor de retorno.
Ojoin()
Função out times e returnsundefined
.
{@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}
Oterminate()
A função é usada para encerrar forçosamente um thread e liberar os recursos de hardware utilizados pelo thread criado.
Terminar (((
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 a execução de um thread com força.
Para fios que são forçosamente terminados peloterminate()
A função, já não podemos usar ojoin()
Função para esperar que eles terminem.
{@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/Thread/eventLoop eventLoop}
OgetData()
A função é usada para acessar variáveis registradas no ambiente do thread.join()
função (em espera de saída bem sucedida) e não executou oterminate()
Função (terminar o fio à força).
OgetData()
função retorna o valor da chave correspondente aokey
Parâmetro no par chave-valor armazenado no contexto do thread atual.
string, number, bool, object, array, null value e outros tipos suportados pelo sistema
GetData (em inglês) GetData (chave)
Okey
Parâmetro é o nome da chave do par chave-valor armazenado.
Chave verdade cordel
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()
}
Gravar o valor da chavecount
no ambiente de thread simultâneo, e depois ler o valor chave decount
no assunto 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}, {@fun/Threads/Thread/eventLoop eventLoop}
OsetData()
função é usada para armazenar variáveis no contexto do thread.
setData ((chave, valor)
Okey
O parâmetro é utilizado para especificar o nome da chave do par chave-valor armazenado.
Chave
verdade
cordel
Ovalue
O parâmetro é utilizado para especificar o valor da chave do par chave-valor armazenado.
Valor verdade Qualquer tipo suportado pelo sistema, como string, número, bool, objeto, matriz, função, 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()
}
Configure o par chave-valor no thread concorrente e leia o par chave-valor no thread 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()
}
Suporta a passagem de valores-chave em funções.
Os dados são válidos quando o tópico não executou ojoin()
função (em espera de saída bem sucedida) e não executou oterminate()
Função (terminando o fio forçosamente).value
deve ser uma variável serializável.
{@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}
Oid()
função é usada para retornar othreadId
da instância de objeto multithread atual.
O valor de retorno doid()
função éthreadId
.
Número
id()
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.id():`, t1.id())
t1.join()
}
Crie um thread em execução simultânea e faça a saídathreadId
deste fio concorrente no fio 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}
Oname()
função é usada para retornar o nome da instância atual de objeto multithreaded.
Oname()
função retorna o nome do thread concorrente.
cordel
Nome (s)
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.name():`, t1.name()) // t1.name(): Thread-1
t1.join()
}
Crie um tópico concorrente e produza o nome do tópico concorrente no tópico 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}
OeventLoop()
função é usada para ouvir eventos recebidos pelo thread.
OeventLoop()
função retorna a informação do evento recebida pelo thread atual.Estrutura de informação de eventos.
Objeto, valor nulo
EventLoop (em inglês) EventLoop (tempo de espera)
O parâmetrotimeout
é a definição de timeout em milissegundos.timeout
Se for definido como 0, ele vai esperar que um evento ocorra antes de retornar. Se for maior que 0, ele irá definir o evento de espera de tempo. Se for menor que 0, ele retornará o último evento imediatamente.
tempo de espera Falso 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()
}
Se o timeout ocorrer ou a função retornar imediatamente, o valor de saída é nulo.
O mecanismo de tratamento doeventLoop()
função é o mesmo que a função 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 setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}
Filamentos ThreadLock