Thread
Objekte können erstellt oder zurückgegeben werdenthreading.Thread()
, threading.getThread()
, threading.mainThread()
, undthreading.currentThread()
.
DiepeekMessage()
Funktion wird verwendet, um eine Nachricht von einem Thread zu erhalten.
DiepeekMessage()
Funktion gibt die Nachricht zurück, die vom Thread empfangen wurde, der mit dem aktuellen Thread-Objekt verknüpft ist.
Zeichenfolge, Zahl, bool, Objekt, Array, Nullwert und andere vom System unterstützte Typen
Ein BlickMessage() Sieh nach Nachricht (Timeout)
Der Parametertimeout
ist die Timeout-Einstellung. Sie blockiert und wartet auf die Anzahl der Millisekunden, die vom Parameter festgelegt werden, und gibt Daten zurück. Wenn keine Daten vorliegen und die Timeout-Einstellung das Limit überschreitet, wird ein Nullwert zurückgegeben.timeout
ist auf 0 oder dietimeout
Wenn die Daten des Kanals nicht übergeben werden, wird der Prozess blockiert und wartet, bis Daten aus dem Kanal empfangen werden.timeout
ist auf -1 gesetzt, bedeutet dies, dass der Prozess Daten nicht sofort blockiert und zurückgibt.
Zeitverzögerung falsche Zahl
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()
}
Senden Sie Nachrichten an den Hauptthread von einem gleichzeitigen Thread.
Beim Schreiben von Programmen müssen wir auf Thread-Standstillstandsprobleme achten.
{@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}
DiepostMessage()
Funktion wird verwendet, um eine Nachricht an einen Thread zu senden.
PostNachricht ((msg)
Der Parametermsg
ist die Botschaft, die gesendet wird.
Msg - Das stimmt. Jeder vom System unterstützte Typ, z. B. Zeichenfolge, Zahl, bool, Objekt, Array, Funktion, Nullwert usw.
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()
}
Senden von Nachrichten in gleichzeitigen Threads und VerwendungeventLoop()
um Benachrichtigungen über Nachrichten zu erhalten.
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()
}
Es unterstützt das Senden einer Funktion.
Wenn die Ausführungsfunktion eines Threads diepostMessage()
Wir können die Funktion verwenden, um ein Signal oder Daten zu senden, ein Nachrichtenereignis wird auch generiert.eventLoop()
Funktion zum Empfangen von Nachrichtenbenachrichtigungen.
{@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/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}
Diejoin()
Funktion wird verwendet, um zu warten, bis der Thread aussteigt und die Systemressourcen zurückfordert.
DieThreadRet
Gegenstandenthält Daten über das Ausführungsergebnis. Zu den Eigenschaften gehören:
ThreadRet
Gegenstand
Ich bin ein Teil von dir. Teilnahme (Timeout)
Dietimeout
Die Zeitdauer in Millisekunden für das Warten auf das Ende des Threads wird verwendet.timeout
Parameter auf 0 oder dietimeout
Parameter nicht eingestellt ist,join()
Funktion wird blockieren und warten, bis der Thread ausführt.timeout
Der Parameter ist auf -1,join()
Die Funktion wird sofort wiederhergestellt.
Zeitverzögerung falsche Zahl
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}
}
Test derjoin()
Funktion für Timeout und Ausgabe des Rückgabewerts.
Diejoin()
Funktionszeiten aus und zurückundefined
.
{@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}
Dieterminate()
Funktion wird verwendet, um einen Thread zwangsweise zu beenden und die Hardware-Ressourcen freizugeben, die vom erstellten Thread verwendet werden.
beenden
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)
}
}
Die Ausführung eines Threads wird gewaltsam beendet. Nach dem gewaltsamen Beenden eines Threads gibt es keinen Ausgang aus diesem Thread im Protokoll.
Für Fäden, die gewaltsam durch dieterminate()
Wir können nicht mehr diejoin()
Funktion, um zu warten, bis sie beendet werden.
{@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}
DiegetData()
Diese Funktion wird verwendet, um auf Variablen zuzugreifen, die in der Thread-Umgebung aufgezeichnet sind.join()
Funktion (Wartend auf erfolgreichen Ausgang) und hat dieterminate()
Funktion (Zwangsschließung des Gurtes).
DiegetData()
Funktion gibt den Schlüsselwert zurückkey
Parameter im Schlüssel-Wert-Paar, das im aktuellen Thread-Kontext gespeichert ist.
Zeichenfolge, Zahl, bool, Objekt, Array, Nullwert und andere vom System unterstützte Typen
GetDaten (siehe unten) GetData (Schlüssel)
Diekey
Parameter ist der Schlüsselname des gespeicherten Schlüssel-Wert-Paares.
Schlüssel wahr String
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()
}
Wert des Schlüssels erfassencount
in der gleichzeitigen Thread-Umgebung, und dann lesen Sie den Schlüsselwert voncount
in den Hauptgedanken.
{@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}
DiesetData()
Funktion wird verwendet, um Variablen im Thread-Kontext zu speichern.
SetDaten (Schlüssel, Wert)
Diekey
Parameter wird verwendet, um den Schlüsselnamen des gespeicherten Schlüssel-Wert-Paares anzugeben.
Schlüssel
wahr
String
Dievalue
Parameter wird verwendet, um den Schlüsselwert des gespeicherten Schlüssel-Wert-Paares anzugeben.
Wert - Das stimmt. Jeder vom System unterstützte Typ, z. B. Zeichenfolge, Zahl, bool, Objekt, Array, Funktion, Nullwert usw.
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Sleep(1000)
Log(`t1.getData("data"):`, t1.getData("data"))
t1.join()
}
Setzen Sie das Schlüssel-Wert-Paar im gleichzeitigen Thread und lesen Sie das Schlüssel-Wert-Paar im Hauptthread.
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()
}
Es unterstützt die Übertragung von Schlüsselwerten auf Funktionen.
Die Daten sind gültig, wenn der Thread diejoin()
Funktion (Wartend auf erfolgreichen Ausgang) und hat dieterminate()
Funktion (Zwangsbeenden des Threads).value
muss eine serialisierbare Variable sein.
{@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}
Dieid()
Funktion wird verwendet, um diethreadId
der aktuellen multithreaded Objektinstanz.
Der Rücklaufwert derid()
Funktion istthreadId
.
Zahl
Die Daten sind hier:
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.id():`, t1.id())
t1.join()
}
Erstellen Sie einen gleichzeitig laufenden Thread und geben Sie diethreadId
von diesem gleichlaufenden Faden im Hauptfaden.
{@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/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}
Diename()
Funktion wird verwendet, um den Namen der aktuellen Multithreaded-Objektinstanz zurückzugeben.
Diename()
Funktion gibt den gleichzeitigen Threadnamen zurück.
String
Name (n)
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.name():`, t1.name()) // t1.name(): Thread-1
t1.join()
}
Erstellen Sie einen gleichzeitigen Thread und geben Sie den Namen des gleichzeitigen Threads im Hauptthread aus.
{@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/eventLoop eventLoop}
DieeventLoop()
Die Funktion wird verwendet, um die vom Thread empfangenen Ereignisse anzuhören.
DieeventLoop()
Funktion gibt die vom aktuellen Thread empfangenen Ereignisinformationen zurück. SieheVeranstaltungsinformationsstruktur.
Objekt, Nullwert
EventLoop ((() EventLoop (Zeitrahmen)
Der Parametertimeout
ist die Timeout-Einstellung in Millisekunden.timeout
ist auf 0 gesetzt, wartet es, bis ein Ereignis stattfindet, bevor es zurückkehrt. Wenn es größer als 0 ist, setzt es das Ereignis auf Wartezeit. Wenn es kleiner als 0 ist, gibt es sofort das letzte Ereignis zurück.
Zeitverzögerung falsche Zahl
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()
}
Führen Sie drei Threads gleichzeitig aus und geben Sie die empfangenen Ereignisinformationen aus.
Der Verarbeitungsmechanismus dereventLoop()
Funktion ist die gleiche wie die globale FunktionEventLoop()
.
{@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}
Schleiffaden ThreadLock