資源の読み込みに... 荷物...

スレッド

Thread作成または返却することができます.threading.Thread(), threading.getThread(), threading.mainThread()そしてthreading.currentThread().

peek メッセージ

についてpeekMessage()この関数はスレッドからメッセージを受け取るのに使われます

についてpeekMessage()この関数は,現在のスレッドオブジェクトに関連付けられたスレッドが受信したメッセージを返します.

文字列,数,ボール,オブジェクト,配列,ゼロ値,システムでサポートされる他のタイプ

peekMessage (メッセージ) peekMessage (タイムアウト)

パラメータtimeouttimeout の設定です. パラメータによって設定されたミリ秒の数をブロックして待ち,データを返します. データがない場合,タイムアウトが限界を超えると, null 値が返されます.timeout0 に設定されているか,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オブジェクト実行結果に関するデータを含みます.その属性には以下が含まれます:

  • id:スレッドID
  • terminated: 糸が強制的に終了するかどうか.
  • 経過:ナノ秒で糸の走行時間.
  • ret:スレッド関数の返される値.

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

getデータ

について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()この関数はスレッドコンテキスト内の変数を保存するために使用されます.

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

について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}, {@

スレッド スレッドロック