Thread
ऑब्जेक्ट द्वारा बनाया या लौटाया जा सकता हैthreading.Thread()
, threading.getThread()
, threading.mainThread()
, औरthreading.currentThread()
.
..peekMessage()
फ़ंक्शन का उपयोग किसी थ्रेड से संदेश प्राप्त करने के लिए किया जाता है.
..peekMessage()
फ़ंक्शन वर्तमान थ्रेड ऑब्जेक्ट से जुड़े थ्रेड द्वारा प्राप्त संदेश लौटाता है.
string, number, bool, object, array, null value और अन्य प्रकार जो सिस्टम द्वारा समर्थित हैं
peekMessage() peekMessage ((टाइमआउट)
पैरामीटरtimeout
timeout setting है. यह पैरामीटर द्वारा सेट मिलीसेकंड की संख्या के लिए ब्लॉक और प्रतीक्षा करेगा और डेटा लौटाएगा. यदि कोई डेटा नहीं है और timeout सीमा से अधिक है, तो एक शून्य मान लौटाया जाएगा. यदिtimeout
0 पर सेट है याtimeout
पैरामीटर पारित नहीं किया जाता है, इसका मतलब यह है कि प्रक्रिया अवरुद्ध होगा और प्रतीक्षा जब तक चैनल से डेटा प्राप्त होता है।timeout
यदि -१ पर सेट किया गया है, तो इसका अर्थ है कि प्रक्रिया तुरंत डेटा को ब्लॉक और वापस नहीं करेगी। यदि कोई डेटा नहीं है, तो शून्य मान वापस किया जाएगा।
टाइमआउट झूठी संख्या
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}, {@Threads/Threads/eventLoop eventLoop}
..postMessage()
फ़ंक्शन का उपयोग किसी थ्रेड को संदेश भेजने के लिए किया जाता है.
postMessage(msg)
पैरामीटर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 setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name join}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/name}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/
..join()
कार्य का उपयोग थ्रेड के बाहर निकलने और सिस्टम संसाधनों को पुनः प्राप्त करने के लिए किया जाता है।
..ThreadRet
वस्तुनिष्पादन परिणाम के बारे में डेटा शामिल है। गुणों में निम्नलिखित शामिल हैंः
ThreadRet
वस्तु
सम्मिलित होना शामिल होना (timeout)
..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()
फ़ंक्शन समय बाहर और लौटाता है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/Thread/id id}, {@fun/Threads/Thread/name name name}, {@fun/Threads/Threads/Thread/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/Thread/name 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}, {@
..getData()
कार्य का उपयोग थ्रेड वातावरण में दर्ज चर तक पहुँचने के लिए किया जाता है।join()
कार्य (सफलता से बाहर निकलने की प्रतीक्षा) और निष्पादित नहीं किया हैterminate()
कार्य (गंजा को बलपूर्वक समाप्त करना) ।
..getData()
फ़ंक्शन कुंजी मान के अनुरूप लौटाता हैkey
वर्तमान थ्रेड संदर्भ में संग्रहीत कुंजी-मूल्य जोड़ी में पैरामीटर.
string, number, bool, object, array, null value और अन्य प्रकार जो सिस्टम द्वारा समर्थित हैं
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/eventLoop eventLoop}
..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
एक serializable चर होना चाहिए.
{@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 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}, {@
..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/Thread/name 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/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/event
..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/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/
..eventLoop()
फ़ंक्शन का उपयोग थ्रेड द्वारा प्राप्त घटनाओं के लिए सुनने के लिए किया जाता है.
..eventLoop()
फ़ंक्शन वर्तमान थ्रेड द्वारा प्राप्त घटना जानकारी लौटाता है.घटना सूचना संरचना.
वस्तु, शून्य मान
घटनाLoop() घटना लूप (टाइमआउट)
पैरामीटरtimeout
मिलीसेकंड में टाइमआउट सेटिंग है. यदि पैरामीटरtimeout
यदि यह 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()
}
एक साथ तीन थ्रेड निष्पादित करें और प्राप्त घटना जानकारी आउटपुट करें. यदि टाइमआउट होता है या फ़ंक्शन तुरंत वापस आता है, तो आउटपुट मान शून्य है.
प्रक्रिया तंत्र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 name}, {@fun/Threads/name name name}, {@fun/Threads/Thread/name name name}, {@fun/Threads/data setData}, {@fun/Threads/Threads/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/name name name}, {@fun/Threads/Thread/name name name}, {@fun/Thre
थ्रेडिंग थ्रेडलॉक