Thread
Les objets peuvent être créés ou retournés parthreading.Thread()
, threading.getThread()
, threading.mainThread()
, etthreading.currentThread()
.
LepeekMessage()
la fonction est utilisée pour obtenir un message d'un thread.
LepeekMessage()
fonction renvoie le message reçu par le thread associé à l'objet de thread en cours.
chaîne, nombre, bool, objet, tableau, valeur nulle et autres types pris en charge par le système
Je suis en train de lire un article. Je suis en train d'essayer d'arrêter.
Le paramètretimeout
est le paramètre de temps d'arrêt. Il bloque et attend le nombre de millisecondes défini par le paramètre et renvoie les données. S'il n'y a pas de données et que le temps d'arrêt dépasse la limite, une valeur nulle est renvoyée. Sitimeout
est réglé sur 0 ou letimeout
si le paramètre n'est pas passé, cela signifie que le processus va bloquer et attendre jusqu'à ce que les données soient reçues du canal.timeout
Si la valeur est réglée sur -1, cela signifie que le processus ne bloquera pas et ne renverra pas les données immédiatement.
temps d'arrêt faux Numéro
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()
}
Envoyer des messages au fil principal à partir d'un fil concurrent.
Lorsque nous écrivons des programmes, nous devons prêter attention aux problèmes d'impasse des threads.
{@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 name}, {@Threads/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}
LepostMessage()
fonction est utilisée pour envoyer un message à un thread.
PostMessage (message)
Le paramètremsg
est le message à envoyer.
Message à envoyer vrai Tout type pris en charge par le système, tel que chaîne, nombre, bool, objet, tableau, fonction, valeur nulle, 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()
}
Envoyer des messages dans des threads simultanés et utilisereventLoop()
pour recevoir des notifications de messages.
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()
}
Il prend en charge l'envoi d'une fonction.
Lorsque la fonction d'exécution d'un thread appelle lepostMessage()
Nous pouvons utiliser la fonction pour envoyer un signal ou des données, un événement de message est également généré.eventLoop()
fonction de réception des notifications de messages.
{@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}, {@fun/Threads/Threads/eventLoop eventLoop}
Lejoin()
fonction est utilisée pour attendre que le thread sorte et récupère les ressources du système.
LeThreadRet
objetcontient des données sur le résultat de l'exécution.
ThreadRet
objet
rejoignez rejoindre ((timeout)
Letimeout
Le paramètre est utilisé pour définir le temps d'arrêt en millisecondes pour attendre la fin du fil.timeout
paramètre est réglé sur 0 ou letimeout
paramètre n'est pas réglé, lejoin()
fonction va bloquer et attendre jusqu'à ce que le fil termine l'exécution.timeout
le paramètre est réglé sur -1,join()
La fonction va revenir immédiatement.
temps d'arrêt faux Numéro
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}
}
Testez lejoin()
fonction pour le temps d'arrêt et la sortie de la valeur de retour.
Lejoin()
temps de sortie et de retour de la fonctionundefined
.
{@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/Threads/Thread/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}
Leterminate()
fonction est utilisée pour mettre fin de force à un thread et libérer les ressources matérielles utilisées par le thread créé.
terminé
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)
}
}
Terminer l'exécution d'un thread par la force. Après avoir terminé un thread par la force, il n'y aura pas de sortie de ce thread dans le journal.
Pour les fils qui sont terminés de force par leterminate()
Nous ne pouvons plus utiliser lejoin()
fonction d'attendre qu'ils se terminent.
{@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/Threads/Thread/name name}, {@fun/Threads/Threads/eventLoop Loop}
LegetData()
Les données sont valables lorsque le thread n'a pas exécuté lejoin()
fonction (en attente de sortie réussie) et n'a pas exécuté leterminate()
fonction (termination du fil par la force).
LegetData()
La fonction renvoie la valeur de clé correspondant à la valeur dekey
paramètre dans la paire clé-valeur stockée dans le contexte du thread en cours.
chaîne, nombre, bool, objet, tableau, valeur nulle et autres types pris en charge par le système
- Je ne sais pas. Je suis en train d' écrire.
Lekey
paramètre est le nom de la clé de la paire clé-valeur stockée.
clé vrai chaîne
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()
}
Enregistrer la valeur de la clécount
dans l'environnement de fil en parallèle, puis lire la valeur clé decount
dans le fil 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}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/
LesetData()
la fonction est utilisée pour stocker des variables dans le contexte du thread.
définitionDétails (clé, valeur)
Lekey
paramètre est utilisé pour spécifier le nom de clé de la paire clé-valeur stockée.
clé
vrai
chaîne
Levalue
paramètre est utilisé pour spécifier la valeur de clé de la paire clé-valeur stockée.
valeur vrai Tout type pris en charge par le système, tel que chaîne, nombre, bool, objet, tableau, fonction, valeur nulle, etc.
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Sleep(1000)
Log(`t1.getData("data"):`, t1.getData("data"))
t1.join()
}
Définissez la paire clé-valeur dans le thread concurrent et lisez la paire clé-valeur dans le 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()
}
Il prend en charge le passage de la valeur de la clé dans les fonctions.
Les données sont valables lorsque le thread n'a pas exécuté lejoin()
fonction (en attente de sortie réussie) et n'a pas exécuté leterminate()
La valeur du paramètrevalue
doit être une variable sérialisable.
{@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/Threads/eventLoop eventLoop}
Leid()
fonction est utilisée pour retourner lethreadId
de l'instance d'objet multithread actuelle.
La valeur de rendement de laid()
la fonction estthreadId
.
Numéro
Nom de l'entreprise
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.id():`, t1.id())
t1.join()
}
Créez un fil en cours d'exécution simultanée et sortez lethreadId
de ce fil parallèle dans le fil 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}
Lename()
fonction est utilisée pour renvoyer le nom de l'instance d'objet multithreaded en cours.
Lename()
la fonction renvoie le nom du fil concurrent.
une chaîne
Nom (s)
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.name():`, t1.name()) // t1.name(): Thread-1
t1.join()
}
Créez un fil de discussion concurrent et sortez le nom du fil de discussion concurrent dans le fil 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/thread/eventLoop eventLoop}
LeeventLoop()
la fonction est utilisée pour écouter les événements reçus par le thread.
LeeventLoop()
fonction renvoie les informations d'événement reçues par le fil courant.Structure de l'information sur les événements.
objet, valeur nulle
événementLoop() événement Loop (délai de réponse)
Le paramètretimeout
est le temps d'arrêt en millisecondes.timeout
s'il est défini sur 0, il attend qu'un événement se produise avant de retourner. s'il est supérieur à 0, il définit le temps d'attente de l'événement. s'il est inférieur à 0, il renvoie immédiatement le dernier événement.
temps d'arrêt faux Numéro
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()
}
Exécuter trois threads simultanément et produire les informations d'événement reçues.
Le mécanisme de traitement deseventLoop()
est la même que la fonction globaleEventLoop()
.
{@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}, {@fun/Threads/Thread/name name},
filtrage Fermeture de fil