Thread
objek boleh dicipta atau dikembalikan olehthreading.Thread()
, threading.getThread()
, threading.mainThread()
, danthreading.currentThread()
.
PeraturanpeekMessage()
fungsi digunakan untuk mendapatkan mesej dari utas.
PeraturanpeekMessage()
fungsi mengembalikan mesej yang diterima oleh utas yang dikaitkan dengan objek utas semasa.
rentetan, nombor, bool, objek, susunan, nilai sifar dan jenis lain yang disokong oleh sistem
PeekMessage() peekMessage ((timeout)
Parametertimeout
adalah tetapan masa lapang. Ia akan menyekat dan menunggu bilangan milidetik yang ditetapkan oleh parameter dan mengembalikan data. Jika tidak ada data dan masa lapang melebihi had, nilai sifar akan dikembalikan. Jikatimeout
ditetapkan kepada 0 atautimeout
parameter tidak lulus, ia bermakna bahawa proses akan menyekat dan menunggu sehingga data diterima dari saluran.timeout
Jika set kepada -1, ia bermaksud bahawa proses tidak akan menyekat dan mengembalikan data dengan segera. Jika tidak ada data, nilai null akan dikembalikan.
masa lapang palsu nombor
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()
}
Hantar mesej ke thread utama dari thread serentak.
Apabila menulis program, kita perlu memberi perhatian kepada masalah 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}
PeraturanpostMessage()
fungsi digunakan untuk menghantar mesej ke utas.
postMessage ((msg)
Parametermsg
adalah mesej yang akan dihantar.
msg betul Mana-mana jenis yang disokong oleh sistem, seperti rentetan, nombor, bool, objek, array, fungsi, nilai sifar, dll.
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()
}
Hantar mesej dalam utas serentak dan gunakaneventLoop()
untuk menerima pemberitahuan mesej.
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()
}
Ia menyokong menghantar fungsi.
Apabila fungsi pelaksanaan threadpostMessage()
fungsi untuk menghantar isyarat atau data, peristiwa mesej juga dihasilkan.eventLoop()
fungsi untuk menerima pemberitahuan mesej.
{@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}
Peraturanjoin()
fungsi digunakan untuk menunggu untuk utas untuk keluar dan mendapatkan semula sumber sistem.
PeraturanThreadRet
objekmengandungi data mengenai hasil pelaksanaan.
ThreadRet
objek
menyertai ((() join ((timeout)
Peraturantimeout
parameter digunakan untuk menetapkan masa lapang dalam mili saat untuk menunggu untuk benang untuk selesai.timeout
parameter ditetapkan kepada 0 atautimeout
parameter tidak ditetapkan,join()
fungsi akan menyekat dan menunggu sehingga benang selesai menjalankan.timeout
parameter ditetapkan kepada -1,join()
Fungsi akan kembali dengan segera.
masa lapang palsu nombor
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}
}
Ujijoin()
fungsi untuk masa lapang dan output nilai pulangan.
Peraturanjoin()
fungsi masa keluar dan kembaliundefined
.
{@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}
Peraturanterminate()
fungsi digunakan untuk memaksa menamatkan thread dan melepaskan sumber perkakasan yang digunakan oleh thread yang dicipta.
mengakhiri ((()
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)
}
}
Menamatkan pelaksanaan thread dengan paksa. Selepas memaksa menamatkan thread, tidak akan ada output dari thread ini dalam log.
Untuk benang yang diakhiri secara paksa olehterminate()
fungsi, kita tidak boleh lagi menggunakanjoin()
fungsi untuk menunggu mereka untuk menamatkan.
{@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}
PeraturangetData()
fungsi digunakan untuk mengakses pembolehubah yang direkodkan dalam persekitaran benang. data adalah sah apabila benang belum menjalankanjoin()
fungsi (menunggu kejayaan keluar) dan tidak menjalankanterminate()
fungsi (mengakhiri benang secara paksa).
PeraturangetData()
fungsi mengembalikan nilai kunci yang sepadan dengankey
parameter dalam pasangan kunci-nilai yang disimpan dalam konteks thread semasa.
rentetan, nombor, bool, objek, susunan, nilai sifar dan jenis lain yang disokong oleh sistem
getData() getData (kunci)
Peraturankey
parameter adalah nama kunci pasangan kunci-nilai yang disimpan.
kunci betul senar
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()
}
Mencatatkan nilai kuncicount
dalam persekitaran benang serentak, dan kemudian membaca nilai kuncicount
dalam benang utama.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}
PeraturansetData()
fungsi digunakan untuk menyimpan pembolehubah dalam konteks benang.
setData ((kunci, nilai)
Peraturankey
parameter digunakan untuk menentukan nama kunci pasangan kunci-nilai yang disimpan.
kunci
betul
senar
Peraturanvalue
parameter digunakan untuk menentukan nilai kunci pasangan kunci-nilai yang disimpan.
nilai betul Mana-mana jenis yang disokong oleh sistem, seperti rentetan, nombor, bool, objek, array, fungsi, nilai sifar, dll.
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Sleep(1000)
Log(`t1.getData("data"):`, t1.getData("data"))
t1.join()
}
Tetapkan pasangan kunci-nilai di benang serentak dan baca pasangan kunci-nilai di benang utama.
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()
}
Ia menyokong nilai kunci yang lulus ke fungsi.
Data adalah sah apabila benang belum dilaksanakanjoin()
fungsi (menunggu kejayaan keluar) dan tidak menjalankanterminate()
fungsi (mengakhiri benang secara paksa). Nilai parametervalue
mestilah pembolehubah yang boleh diserialisasikan.
{@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}
Peraturanid()
fungsi digunakan untuk mengembalikanthreadId
dari contoh objek multithread semasa.
Nilai pulanganid()
fungsi ialahthreadId
.
nombor
id()
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.id():`, t1.id())
t1.join()
}
Membuat benang yang berjalan serentak dan outputthreadId
daripada benang serentak ini dalam benang utama.
{@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}
Peraturanname()
fungsi digunakan untuk mengembalikan nama contoh objek multithread semasa.
Peraturanname()
fungsi mengembalikan nama benang bersamaan.
senar
nama (()
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.name():`, t1.name()) // t1.name(): Thread-1
t1.join()
}
Buat thread serentak dan keluarkan nama thread serentak dalam thread utama.
{@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}
PeraturaneventLoop()
fungsi digunakan untuk mendengar untuk peristiwa yang diterima oleh benang.
PeraturaneventLoop()
fungsi mengembalikan maklumat peristiwa yang diterima oleh thread semasa. LihatStruktur Maklumat Acara.
objek, nilai sifar
eventLoop (dalam bahasa Inggeris) eventLoop (timeout)
Parametertimeout
adalah tetapan masa lapang dalam milidetik. Jika parametertimeout
Jika ia lebih besar daripada 0, ia akan menetapkan masa tunggu acara. Jika ia kurang daripada 0, ia akan mengembalikan acara terbaru dengan serta-merta.
masa lapang palsu nombor
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()
}
Melakukan tiga benang serentak dan mengeluarkan maklumat peristiwa yang diterima. Jika masa tamat berlaku atau fungsi kembali dengan segera, nilai output adalah sifar.
Mekanisme pemprosesaneventLoop()
fungsi adalah sama dengan fungsi 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}
Penggelek ThreadLock