O recurso está a ser carregado... Carregamento...

Fios

Threadobjetos podem ser criados ou devolvidos porthreading.Thread(), threading.getThread(), threading.mainThread(), ethreading.currentThread().

PeekMensagem

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 otimeoutParâmetro não é passado, significa que o processo irá bloquear e esperar até que os dados sejam recebidos do canal.timeoutse 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}

PostMensagem

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 threads chama opostMessage()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}

juntar-se

Ojoin()A função é usada para esperar que o thread saia e recupere os recursos do sistema.

OThreadRetObjetocontém dados sobre o resultado da execução. As propriedades incluem:

  • Identificação: Identificação do fio.
  • terminado: se o fio é forçado a terminar.
  • decorrido: tempo de execução do fio em nanossegundos.
  • ret: O valor de retorno da função thread.

ThreadRetObjeto

Junte-se. Participação (timeout)

OtimeoutO parâmetro é usado para definir o timeout em milissegundos para esperar que o fio termine.timeoutParâmetro é definido em 0 ou otimeoutParâmetro não definido, ojoin()função irá bloquear e esperar até que o tópico terminar de executar.timeoutParâ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}

encerrar

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}

getData

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 aokeyParâ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)

OkeyParâ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 chavecountno ambiente de thread simultâneo, e depois ler o valor chave decountno 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}

setData

OsetData()função é usada para armazenar variáveis no contexto do thread.

setData ((chave, valor)

OkeyO parâmetro é utilizado para especificar o nome da chave do par chave-valor armazenado.

Chave verdade cordel OvalueO 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).valuedeve 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}

Identificação

Oid()função é usada para retornar othreadIdda 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ídathreadIddeste 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}

nome

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}

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.timeoutSe 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