Thread
作成または返却することができます.threading.Thread()
, threading.getThread()
, threading.mainThread()
そしてthreading.currentThread()
.
についてpeekMessage()
この関数はスレッドからメッセージを受け取るのに使われます
についてpeekMessage()
この関数は,現在のスレッドオブジェクトに関連付けられたスレッドが受信したメッセージを返します.
文字列,数,ボール,オブジェクト,配列,ゼロ値,システムでサポートされる他のタイプ
peekMessage (メッセージ) peekMessage (タイムアウト)
パラメータtimeout
timeout の設定です. パラメータによって設定されたミリ秒の数をブロックして待ち,データを返します. データがない場合,タイムアウトが限界を超えると, null 値が返されます.timeout
0 に設定されているか,timeout
プロセスがブロックされ,チャネルからデータが受信されるまで待つことを意味します.timeout
−1に設定された場合,プロセスはデータをブロックし,すぐに返却しないことを意味します.データがない場合は,ゼロ値が返されます.
タイムアウト 偽り 番号
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()
}
同期スレッドからメインスレッドにメッセージを送信します.
プログラムを書くとき スレッド・デッドロックの問題に 注意を払う必要があります
{@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/join name}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/event
についてpostMessage()
この関数はスレッドにメッセージを送信するために使用されます.
postMessage ((msg) について
パラメータmsg
メッセージを送信します
メッセージ 本当 文字列,数,ボール,オブジェクト,配列,関数,ゼロ値など,システムでサポートされる任意のタイプ
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()
}
同期スレッドでメッセージを送信し,使用するeventLoop()
メッセージの通知を受け取る
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()
}
函数を送信もサポートします
実行関数に呼び出します.postMessage()
メッセージ イベントも生成されます.eventLoop()
メッセージ通知を受信する機能
{@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 join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Threads/id id}, {@fun/Threads/Threads/Threads/name name}, {@fun/Threads/Thread/eventLoop eventLoop}
についてjoin()
この機能はスレッドが終了してシステムリソースを回収するのを待つために使用されます.
についてThreadRet
オブジェクト実行結果に関するデータを含みます.その属性には以下が含まれます:
ThreadRet
オブジェクト
加入する 加入 (タイムアウト)
についてtimeout
スレッドが終了するのを待つためのミリ秒でタイムアウトを設定するために使用されます.timeout
パラメータが0に設定されているかtimeout
パラメータが設定されていない場合,join()
実行が完了するまで待つ.timeout
パラメータが -1 に設定され,join()
機能がすぐに戻ります
タイムアウト 偽り 番号
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}
}
試験するjoin()
タイムアウトの関数と返却値を出力します
についてjoin()
関数 out と return の時間undefined
.
{@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/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name}, {@fun/Threads/Thread/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Threads/eventLoop eventLoop}, {@fun/Threads/thread/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop eventLoop
についてterminate()
この機能はスレッドを強制的に終了し,作成したスレッドが使用するハードウェアリソースを解放するために使用されます.
終了する
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)
}
}
スレッドの実行を強制的に終了します. スレッドを強制的に終了した後,ログにこのスレッドからの出力はありません.
糸が強要的に切断される場合terminate()
機能,我々はもはや使用することはできませんjoin()
機能が終了するのを待つことです
{@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/Thread/eventLoop eventLoop}, {@fun/Threads/Threads/eventLoop eventLoop}, {@fun/Threads/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop event
についてgetData()
この関数はスレッド環境で記録された変数にアクセスするために使用されます.スレッドが実行していない場合,データは有効です.join()
実行していない場合terminate()
機能 (糸を強制的に切る)
についてgetData()
この関数は,この関数に対応するキー値を返します.key
現在のスレッドコンテキストに格納されたキー値ペアのパラメータです.
文字列,数,ボール,オブジェクト,配列,ゼロ値,システムでサポートされる他のタイプ
getData (データ取得) getData (キー) を取得する
についてkey
パラメータは,保存されたキー値ペアのキー名です.
キー 本当 文字列
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()
}
鍵の値を記録するcount
鍵値を読み取ることができます.count
主要な話題です
{@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/thread/eventLoop eventLoop}, {@fun/Threads/Threads/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/thread/eventLoop eventLoop eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads
についてsetData()
この関数はスレッドコンテキスト内の変数を保存するために使用されます.
setData (キー,値)
についてkey
パラメータは,保存されたキー値ペアのキー名を指定するために使用されます.
キー
本当
文字列
についてvalue
パラメータは,保存されたキー値ペアのキー値を指定するために使用されます.
価値 本当 文字列,数,ボール,オブジェクト,配列,関数,ゼロ値など,システムでサポートされる任意のタイプ
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Sleep(1000)
Log(`t1.getData("data"):`, t1.getData("data"))
t1.join()
}
同行スレッドにキー値ペアを設定し メインスレッドにキー値ペアを読み取ります
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()
}
鍵値が関数に変換されるのをサポートします.
このスレッドが実行していない場合,このデータは有効です.join()
実行していない場合terminate()
パラメータの値value
シリアル化可能な変数でなければならない.
{@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/Thread/eventLoop eventLoop}, {@fun/Threads/Threads/eventLoop eventLoop}, {@fun/Threads/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop
についてid()
この関数で,threadId
複数のスレッドのオブジェクトのインスタンスの
返金値がid()
機能はthreadId
.
番号
id()
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.id():`, t1.id())
t1.join()
}
同期で実行するスレッドを作成して出力しますthreadId
この同時進行糸がメイン糸に
{@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/Threads/setData set}, {@fun/Threads/Threads/Thread/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/thread/eventLoop eventLoop}, {@fun/Threads/thread/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/
についてname()
この関数は,現在のマルチスレッドオブジェクトインスタンスの名前を返します.
についてname()
この関数は,同時スレッド名を返します.
文字列
氏名
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.name():`, t1.name()) // t1.name(): Thread-1
t1.join()
}
同期スレッドを作成し,メインスレッドで同期スレッドの名前を出力します.
{@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/Threads/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/thread/eventLoop eventLoop}, {@fun/Threads/thread/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Th
についてeventLoop()
この機能はスレッドが受信したイベントを聞くために使用されます.
についてeventLoop()
この関数は,現在のスレッドが受信したイベント情報を返します.イベント情報構造.
オブジェクト,ゼロ値
イベントループ イベントループ (タイムアウト)
パラメータtimeout
パラメータが設定されている場合timeout
値が0に設定されている場合,帰還する前にイベントが起こるのを待つ.値が0を超えると,イベントの待機タイムアウトを設定します.値が0未満の場合,最新のイベントを直ちに返します.
タイムアウト 偽り 番号
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()
}
3つのスレッドを同時に実行し,受信されたイベント情報を出力します.タイムアウトが発生するか,関数がすぐに返される場合は,出力値は null です.
処理メカニズムはeventLoop()
この関数は,この関数と同じです.EventLoop()
.
{@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/Threads/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name}, {@fun/Threads/name id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Threads/name name}, {@fun/Threads/Threads/name name}, {@fun/Threads/Threads/data set}, {@fun/Threads/Threads/id id}, {@fun/Threads/threads/name name}, {@
スレッド スレッドロック