وسائل لوڈ ہو رہے ہیں... لوڈنگ...

تاریں

ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم واقعیJavaScriptزبان کی حکمت عملی کو نظام کے نچلے حصے سے شروع کرتا ہے اور مندرجہ ذیل مقاصد کو نافذ کرتا ہے:

اشیاء ہدایات تبصرے
گھسائی ہوئی ملٹی تھریڈ گلوبل آبجیکٹ رکن کے فرائض:Thread, getThread, mainThread، وغیرہ
تار تھریڈ آبجیکٹ رکن کے فرائض:peekMessage, postMessage, join، وغیرہ
تھریڈلاک تھریڈ لاک آبجیکٹ رکن کے فرائض:acquire, releaseوہ تھریڈ ایگزیکشن فنکشن کے پیرامیٹرز کے طور پر تھریڈ ماحول میں منتقل کیے جا سکتے ہیں۔
تھریڈ واقعہ ایونٹ آبجیکٹ رکن کے فرائض:set, clear, wait, isSet. وہ موضوع کے عملدرآمد کے فنکشن کے پیرامیٹر کے طور پر موضوع کے ماحول میں منتقل کیا جا سکتا ہے.
تھریڈCondition شرط کا اعتراض رکن کے فرائض:notify, notifyAll, wait, acquire, release. وہ موضوع کے عملدرآمد کے فنکشن کے پیرامیٹر کے طور پر موضوع کے ماحول میں منتقل کیا جا سکتا ہے.
ThreadDict لغت کا اعتراض رکن کے فرائض:get, setوہ تھریڈ ایگزیکشن فنکشن کے پیرامیٹرز کے طور پر تھریڈ ماحول میں منتقل کیے جا سکتے ہیں۔

گھسائی ہوئی

کےthreadingobject ایک گلوبل ملٹی تھریڈنگ مینجمنٹ ٹول ہے جو بیک وقت تھریڈز ، تھریڈ لاکس ، اور حالت اشیاء بنانے جیسے افعال مہیا کرتا ہے۔ یہ سیکشن رکن افعال کا تعارف کراتا ہےthreadingاعتراض. یہ اعتراض صرف کی طرف سے حمایت کی ہےJavaScriptزبان کی حکمت عملی.

تار

کےThread()تقریب متوازی موضوعات تخلیق کرنے کے لئے استعمال کیا جاتا ہے.

کےThread()فنکشن a لوٹاتا ہےThreadآبجیکٹ، جو تخلیق کردہ متوازی تھریڈز، تھریڈ مواصلات وغیرہ کا انتظام کرنے کے لئے استعمال ہوتا ہے۔

Threadچیز

تھریڈ ((فنک،...آرگز) تھریڈ ((... آئٹمز)

پیرامیٹرfuncایک ہی وقت میں عملدرآمد کے لئے ایک فنکشن ہے (ریفرنس کے ذریعے منتقل) ، اور گمنام افعال میں منتقل کرنے کی حمایت کرتا ہے.funcمتعدد پیرامیٹرز کو قبول کر سکتے ہیں، جس کے ذریعے منتقل کیا جائے گا...argsاسی وقت کے عملدرآمد کے دوران. لہذا، کے پیرامیٹر کی فہرستfuncکے ساتھ ہم آہنگ ہونا ضروری ہے...args.

فنکشن سچ فنکشن پیرامیٹرargاصل پیرامیٹر ہے جو پاس کیا جاتا ہےfunc(یعنی متوازی تھریڈ عملدرآمد تقریب) جب کال بیک عملدرآمد کیا جاتا ہے؛ متعدد پیرامیٹرز ہوسکتے ہیںarg، اور پیرامیٹر کی فہرستfuncکے ساتھ ہم آہنگ ہونا ضروری ہے...args.

ارگ غلط string، number، bool، object، array، function، null value اور نظام کی حمایت کی دیگر اقسام پیرامیٹرitemایک صف ہے جس میں فنکشن کے حوالہ جات اور ان کے پیرامیٹرز کو بیک وقت انجام دیا جائے گا۔itemپیرامیٹرز میں منتقل کیا جا سکتا ہے جبThread function.

آئٹم سچ صف

function test1(a, b, c) {
    Log("test1:", a, b, c)
}

function main() {
    var t1 = threading.Thread(test1, 1, 2, 3)
    var t2 = threading.Thread(function (msg) {
        Log("msg:", msg)
    }, "Hello thread2")

    t1.join()
    t2.join()
}

ایک کسٹم فنکشن اور ایک گمنام فنکشن دونوں کے لئے بیک وقت تھریڈز بنائیں.

function test1(msg) {
    Log("msg:", msg)
    test2("Hello test2")
}

function main() {
    var t1 = threading.Thread(
        [function(a, b, c) {Log(a, b, c)}, 1, 2, 3], 
        [test1, "Hello test1"], 
        [`function test2(msg) {Log("msg:", msg)}`])

    t1.join()
}

استعمال کریںThread(...items)متوازی موضوعات تخلیق کرنے اور متعدد افعال کو ترتیب سے انجام دینے کے لئے فارم.

function testFunc1(p) {
    Log("testFunc1 p:", p)
}

function main() {
    threading.Thread(function(pfn) {
        var threadName = threading.currentThread().name()
        var threadId = threading.currentThread().id()
        pfn(`in thread threadName: ${threadName}, threadId: ${threadId}`)
    }, testFunc1).join()
}

یہ متوازی طور پر انجام دیئے گئے افعال میں پیرامیٹرز کو منتقل کرنے کی حمایت کرتا ہے۔

function ml(input) {
    const net = new brain.NeuralNetwork()
    net.train([
        { input: [0, 0], output: [0] },
        { input: [0, 1], output: [1] },
        { input: [1, 0], output: [1] },
        { input: [1, 1], output: [0] },
    ])
    return net.run(input)
}

function main() {
    var ret = threading.Thread([ml, [1, 0]], [HttpQuery("https://unpkg.com/brain.js")]).join()

    // ret: {"id":1,"terminated":false,"elapsed":337636000,"ret":{"0":0.9339330196380615}}
    Log(ret)
}

یہ فنکشن سٹرنگز میں منتقل کرنے کی حمایت کرتا ہے اور بیک وقت کمپیوٹنگ کے لئے متحرک طور پر بیرونی لائبریریاں درآمد کرسکتا ہے۔

تھریڈ فنکشنfuncمیں منتقلThread()متوازی عملدرآمد کے لئے فنکشن الگ تھلگ ماحول میں چلتا ہے ، لہذا تھریڈ کے باہر متغیرات کا براہ راست حوالہ نہیں دیا جاسکتا ہے ، اور جب حوالہ دیا جائے تو تالیف ناکام ہوجائے گی۔ اسی وقت ، تھریڈ کے اندر دوسرے بند ہونے والے افعال کے حوالہ جات کی حمایت نہیں کی جاتی ہے۔ پلیٹ فارم کے ذریعہ فراہم کردہ تمام API کو تھریڈ کے اندر بلایا جاسکتا ہے ، لیکن دوسرے صارف کے ذریعہ بیان کردہ افعال کو بلایا نہیں جاسکتا ہے۔

یہ بیک ٹسٹنگ سسٹم اور براہ راست تجارتی ماحول کی حمایت کرتا ہے۔ بیک ٹسٹنگ سسٹم میں صرف بیک وقت تھریڈ سے متعلق تمام افعال کوڈ کی مطابقت کے طور پر تعاون یافتہ ہیں اور بیک وقت تھریڈز کے ذریعہ واقعتا execute انجام نہیں دیئے جائیں گے ، لہذا وہ اس باب میں دہرائے نہیں جائیں گے۔

{@fun/Threads/threading/getThread getThread}، {@fun/Threads/threading/mainThread mainThread}، {@fun/Threads/threading/currentThread currentThread}، {@fun/Threads/threading/Lock Lock}، {@fun/Threads/threading/Condition Condition}، {@fun/Threads/threading/Event Event}، {@fun/Threads/threads/threading/Dict Dict}، {@fun/Threads/threading/pending pending}، {@fun/Threads/threads/threading/eventLoop}

getThread حاصل کریں

کےgetThread()تقریب مخصوص موضوع ID کی بنیاد پر موضوع اعتراض حاصل کرنے کے لئے استعمال کیا جاتا ہے.

کےgetThread()فنکشن واپس کرتا ہےThreadپیرامیٹر کی طرف سے مخصوص threadId کے ساتھ اعتراض

Threadچیز

getThread ((threadId) حاصل کریں

پیرامیٹرthreadIdتھریڈ آبجیکٹ آئی ڈی ہے۔ پیرامیٹر کی وضاحت کرکے متعلقہ تھریڈ آبجیکٹ حاصل کریں۔

ThreadId سچ نمبر

function main() {
    var t1 = threading.Thread(function () {
        Log("Hello thread1")
    })
    // The Thread object has a method: id(), which is used to get the thread ID. You can view the section of the document corresponding to the Thread object.
    var threadId = t1.id()
    var threadName = t1.name()
    Log("threadId:", threadId, ", threadName:", threadName)
    
    var t2 = threading.getThread(threadId)
    Log(`threadId == t2.id():`, threadId == t2.id(), `, threadName == t2.name():`, threadName == t2.name())
}

مخصوص تھریڈ آبجیکٹ کو حاصل کریںthreadId.

یہ بیک ٹیسٹنگ سسٹم اور لائیو ٹریڈنگ ماحول کی حمایت کرتا ہے.

اگر آپ حاصل کرنا چاہتے ہیں تھریڈ پر عملدرآمد کیا گیا ہے اور جاری کیا گیا ہے، آپ کو استعمال نہیں کر سکتے ہیںthreading.getThread(threadId)حاصل کرنے کے لئے thread کے موضوع.

{@fun/Threads/threading/Thread Thread}، {@fun/Threads/threading/mainThread mainThread}، {@fun/Threads/threading/currentThread currentThread}، {@fun/Threads/threading/Lock Lock}، {@fun/Threads/threading/Condition Condition}، {@fun/Threads/threading/Event Event}، {@fun/Threads/threading/Dict Dict}، {@fun/Threads/threading/currentThread currentThread}، {@fun/Threads/threading/threading/Lock Lock}، {@fun/Threads/threading/eventLoop eventLoop}، {@fun/Threads/threads/threading/eventLoop}

مرکزی تھریڈ

کےmainThread()فنکشن مرکزی موضوع کے موضوع کو حاصل کرنے کے لئے استعمال کیا جاتا ہے، یعنی موضوع جہاںmain()حکمت عملی میں فنکشن واقع ہے.

کےmainThread()فنکشن مرکزی موضوع کے موضوع کو واپس کرتا ہے.

Threadچیز

اہم تھریڈ ((()

function main() {
    Log("The threadId of the main thread:", threading.mainThread().id())
}

لے لوThreadمرکزی دھاگے کے اعتراض اور پیداوارthreadIdمرکزی موضوع کی.

function test() {
    Log("Output the main thread ID in the test function:", threading.mainThread().id())
}

function main() {
    var t1 = threading.Thread(test)
    t1.join()
}

مرکزی تھریڈ کا تھریڈ آبجیکٹ بیک وقت تھریڈز میں بھی حاصل کیا جاسکتا ہے۔

یہ بیک ٹیسٹنگ سسٹم اور لائیو ٹریڈنگ ماحول کی حمایت کرتا ہے.

{@fun/Threads/getThread getThread}، {@fun/Threads/threading/Thread Thread}، {@fun/Threads/threading/currentThread currentThread}، {@fun/Threads/threading/Lock Lock}، {@fun/Threads/threading/Condition Condition}، {@fun/Threads/threading/Event Event}، {@fun/Threads/threads/threading/Dict Dict}، {@fun/Threads/threading/currentThread currentThread}، {@fun/Threads/threading/threading/Lock Lock}، {@fun/Threads/threading/eventLoop}، {@fun/Threads/threads/threading/eventLoop}، {@fun/threads/threads/threading/eventLoop}، {@fun/Threads/threads/threading/eventLoop}

موجودہ تھریڈ

کےcurrentThread()تقریب موجودہ موضوع کے موضوع اعتراض حاصل کرنے کے لئے استعمال کیا جاتا ہے.

کےcurrentThread()تقریب موجودہ موضوع کے موضوع اعتراض واپس.

Threadچیز

موجودہ تھریڈ ((()

function test() {
    Log("Id of the current thread:", threading.currentThread().id())
}

function main() {
    var t1 = threading.Thread(test)
    t1.join()
}

لے لوThreadموجودہ دھاگے کے اعتراض اور پیداوارthreadIdموجودہ دھاگے کی.

یہ بیک ٹیسٹنگ سسٹم اور لائیو ٹریڈنگ ماحول کی حمایت کرتا ہے.

{@fun/Threads/threading/Thread Thread}، {@fun/Threads/threading/mainThread mainThread}، {@fun/Threads/threading/Thread Thread}، {@fun/Threads/threading/Lock Lock}، {@fun/Threads/threading/threading/Condition Condition}، {@fun/Threads/threading/event Event}، {@fun/Threads/threads/threading/event Dict}، {@fun/Threads/threading/threading/threading/threading}، {@fun/Threads/threads/threading/threading/Look eventLoop}، {@fun/Threads/threading/eventLoop}، {@fun/Threads/threads/threading/eventLoop}

قفل

کےLock()فنکشن ایک تھریڈ لاک آبجیکٹ بنانے کے لئے استعمال کیا جاتا ہے.

کےLock()فنکشن ایک تھریڈ لاک آبجیکٹ لوٹاتا ہے.

ThreadLockچیز

قفل (()

function consumer(productionQuantity, dict, lock) {
    for (var i = 0; i < productionQuantity; i++) {
        lock.acquire()
        var count = dict.get("count")        
        Log("consumer:", count)
        Sleep(1000)
        lock.release()
    }
}

function producer(productionQuantity, dict, lock) {
    for (var i = 0; i < productionQuantity; i++) {
        lock.acquire()
        dict.set("count", i)
        Log("producer:", i)
        Sleep(1000)
        lock.release()
    }
}

function main() {
    var dict = threading.Dict()
    dict.set("count", -1)
    var lock = threading.Lock()
    var productionQuantity = 10
    var producerThread = threading.Thread(producer, productionQuantity, dict, lock)
    var consumerThread = threading.Thread(consumer, productionQuantity, dict, lock)

    consumerThread.join()
    producerThread.join()
}

دو متوازی موضوعات ایک مشترکہ وسائل تک رسائی حاصل.

یہ بیک ٹیسٹنگ سسٹم اور لائیو ٹریڈنگ ماحول کی حمایت کرتا ہے.

{@fun/Threads/threading/getThread getThread}، {@fun/Threads/threading/mainThread mainThread}، {@fun/Threads/threading/currentThread currentThread}، {@fun/Threads/threads/threading/ThreadThread}، {@fun/Threads/threads/threading/condition Condition}، {@fun/Threads/threads/threading/event Event}، {@fun/Threads/threads/threading/Dict Dict}، {@fun/Threads/threads/threading/pending pending}، {@fun/Threads/threads/threading/threading/eventLoop}، {@fun/Threads/threads/threads/eventLoop}

حالت

کےCondition()فنکشن کا استعمال ایک شرط متغیر آبجیکٹ بنانے کے لئے کیا جاتا ہے ، جو ایک ملٹی تھریڈڈ ہم وقت سازی کے ماحول میں تھریڈز کے مابین ہم وقت سازی اور مواصلات کو حاصل کرنے کے لئے استعمال ہوتا ہے۔Condition()، ایک تھریڈ انتظار کر سکتا ہے جب کچھ شرائط پوری نہیں ہوتی ہیں جب تک کہ دوسرا تھریڈ اسے مطلع نہ کرے کہ شرط پوری ہوگئی ہے۔

کےCondition()فنکشن a لوٹاتا ہےThreadCondition object.

ThreadConditionچیز

حالت

function consumer(productionQuantity, dict, condition) {
    for (var i = 0; i < productionQuantity; i++) {
        condition.acquire()
        while (dict.get("array").length == 0) {
            condition.wait()
        }
        var arr = dict.get("array")
        var count = arr.shift()
        dict.set("array", arr)
        Log("consumer:", count, ", array:", arr)
        condition.release()
        Sleep(1000)
    }
}

function producer(productionQuantity, dict, condition) {
    for (var i = 0; i < productionQuantity; i++) {
        condition.acquire()
        var arr = dict.get("array")
        arr.push(i)
        dict.set("array", arr)
        Log("producer:", i, ", array:", arr)
        condition.notify()
        condition.release()
        Sleep(1000)
    }
}

function main() {
    var dict = threading.Dict()
    dict.set("array", [])
    var condition = threading.Condition()
    var productionQuantity = 10
    var producerThread = threading.Thread(producer, productionQuantity, dict, condition)
    var consumerThread = threading.Thread(consumer, productionQuantity, dict, condition)
    consumerThread.join()
    producerThread.join()
}

دو متوازی موضوعات ایک مشترکہ وسائل تک رسائی حاصل.

بیک ٹسٹنگ سسٹم اس فعالیت کو نافذ نہیں کرتا، یہ صرف اس کی وضاحت کرتا ہے.

{@fun/Threads/getThread getThread}، {@fun/Threads/threads/mainThread mainThread}، {@fun/Threads/threading/currentThread currentThread}، {@fun/Threads/threads/threading/Lock Lock}، {@fun/Threads/threads/threading/thread Thread}، {@fun/Threads/threads/threading/event Event}، {@fun/Threads/threads/threading/Dict Dict}، {@fun/Threads/threading/threading/pending pending}، {@fun/Threads/threading/threading/eventLoop}، {@fun/Threads/threads/threading/eventLoop}،

واقعہ

کےEvent()تقریب ایک تخلیق کرنے کے لئے استعمال کیا جاتا ہےتھریڈ واقعہاعتراض، جو تھریڈز کے درمیان ہم وقت سازی کے لئے استعمال کیا جاتا ہے، جس سے ایک تھریڈ دوسرے تھریڈ سے نوٹیفکیشن یا سگنل کا انتظار کرسکتا ہے۔

کےEvent()فنکشن a لوٹاتا ہےThreadEvent object.

ThreadEventچیز

واقعہ

function consumer(productionQuantity, dict, pEvent, cEvent) {
    for (var i = 0; i < productionQuantity; i++) {
        while (dict.get("array").length == 0) {
            pEvent.wait()
        }
        if (pEvent.isSet()) {
            pEvent.clear()
        }

        var arr = dict.get("array")
        var count = arr.shift()
        dict.set("array", arr)
        Log("consumer:", count, ", array:", arr)
        cEvent.set()
        Sleep(1000)
    }
}

function producer(productionQuantity, dict, pEvent, cEvent) {
    for (var i = 0; i < productionQuantity; i++) {
        while (dict.get("array").length != 0) {
            cEvent.wait()
        }
        if (cEvent.isSet()) {
            cEvent.clear()
        }

        var arr = dict.get("array")
        arr.push(i)
        dict.set("array", arr)
        Log("producer:", i, ", array:", arr)        
        pEvent.set()       
        Sleep(1000)
    }
}

function main() {    
    var dict = threading.Dict()
    dict.set("array", [])
    var pEvent = threading.Event()
    var cEvent = threading.Event()
    var productionQuantity = 10
    var producerThread = threading.Thread(producer, productionQuantity, dict, pEvent, cEvent)
    var consumerThread = threading.Thread(consumer, productionQuantity, dict, pEvent, cEvent)

    consumerThread.join()
    producerThread.join()
}

دو متوازی موضوعات ایک مشترکہ وسائل تک رسائی حاصل.

یہ بیک ٹیسٹنگ سسٹم اور لائیو ٹریڈنگ ماحول کی حمایت کرتا ہے.

{@fun/Threads/threading/getThread getThread}، {@fun/Threads/threading/mainThread mainThread}، {@fun/Threads/threading/currentThread currentThread}، {@fun/Threads/threads/threading/Lock Lock}، {@fun/Threads/threads/threading/Condition Condition}، {@fun/Threads/threads/threading/Thread Thread}، {@fun/Threads/threads/threading/Dict Dict}، {@fun/Threads/threads/threading/pending pending}، {@fun/Threads/threads/threading/eventLoop}

ڈکٹ

کےDict()تقریب متوازی موضوعات پر منتقل کرنے کے لئے ایک لغت اعتراض تخلیق کرنے کے لئے استعمال کیا جاتا ہے.

کےDict()فنکشن a لوٹاتا ہےThreadDict object.

ThreadDictچیز

ڈکٹیٹ

function threadFun1(obj) {
    obj["age"] = 100
    while (true) {
        Log("threadFun1 obj:", obj)
        Sleep(5000)
    }
}

function threadFun2(obj) {
    while (true) {
        Log("threadFun2 obj:", obj)
        Sleep(5000)
    }
}

function main() {
    var obj = {"age": 10}
    var t1 = threading.Thread(threadFun1, obj)
    var t2 = threading.Thread(threadFun2, obj)
    t1.join()
    t2.join()    
}

ایک عام آبجیکٹ کو متوازی تھریڈ ایگزیکشن فنکشن میں منتقل کریں تاکہ یہ جانچنے کے لئے کہ آیا آبجیکٹ کی کلید کی قیمت میں ترمیم کرنے سے دوسرے تھریڈز میں آبجیکٹ کی کلید کی قیمت میں تبدیلی آئے گی۔

function threadFun1(threadDict) {
    threadDict.set("age", 100)
    while (true) {
        Log(`threadFun1 threadDict.get("age"):`, threadDict.get("age"))
        Sleep(5000)
    }
}

function threadFun2(threadDict) {
    while (true) {
        Log(`threadFun2 threadDict.get("age"):`, threadDict.get("age"))
        Sleep(5000)
    }
}

function main() {
    var threadDict = threading.Dict()
    threadDict.set("age", 10)
    var t1 = threading.Thread(threadFun1, threadDict)
    var t2 = threading.Thread(threadFun2, threadDict)

    t1.join()
    t2.join()    
}

پاس کریںThreadDictکی طرف سے پیدا کیا اعتراضDict()فنکشن کو متوازی تھریڈ ایگزیکیوشن فنکشن سے جوڑنا، اور یہ جانچنا کہ آیا آبجیکٹ کی کلید کی قدر میں ترمیم کرنے سے دیگر تھریڈز میں آبجیکٹ کی کلید کی قدر میں تبدیلی آئے گی۔

جب ایک عام اعتراض کو متوازی تھریڈ فنکشن میں منتقل کیا جاتا ہے تو ، اسے گہری کاپی کے طور پر منتقل کیا جاتا ہے۔ متوازی تھریڈ میں کلیدی قدر میں ترمیم کرنے سے دوسرے تھریڈز میں لغت متاثر نہیں ہوگی۔

یہ بیک ٹیسٹنگ سسٹم اور لائیو ٹریڈنگ ماحول کی حمایت کرتا ہے.

{@fun/Threads/threading/getThread getThread}، {@fun/Threads/threading/mainThread mainThread}، {@fun/Threads/threading/currentThread currentThread}، {@fun/Threads/threading/Lock Lock}، {@fun/Threads/threading/Condition Condition}، {@fun/Threads/threading/Event Event}، {@fun/Threads/threading/threading/Thread Thread}، {@fun/Threads/threading/threading/pending pending}، {@fun/Threads/threading/eventLoop}، {@fun/Threads/threading/eventLoop}، {@fun/Threads/threading/threading/eventLoop}،

زیر التوا

کےpendingتقریب موجودہ حکمت عملی پروگرام میں چل رہا متوازی موضوعات کی تعداد حاصل کرنے کے لئے استعمال کیا جاتا ہے.

کےpending()فنکشن متوازی موضوعات کی تعداد واپس کرتا ہے کہ موجودہ حکمت عملی پروگرام چل رہا ہے.

نمبر

زیر التواء

function threadFun1() {
    Log("threadFun1")
    Sleep(3000)
}

function threadFun2() {
    for (var i = 0; i < 3; i++) {
        LogStatus(_D(), "print from threadFun2")
        Sleep(3000)
    }
}

function main() {
    Log(`begin -- threading.pending():`, threading.pending())

    var t1 = threading.Thread(threadFun1)
    var t2 = threading.Thread(threadFun2)
    Log(`after threading.Thread -- threading.pending():`, threading.pending())

    t1.join()
    t2.join()
    Log(`after thread.join -- threading.pending():`, threading.pending())
}

دو بیک وقت چل رہا موضوعات بنائیں اور کال کریںpending()مختلف وقت نوڈس پر کام.

جب حکمت عملیmain()فنکشن چلانے شروع ہوتا ہے، فنکشن کو کال کریںpending()براہ راست 1 واپس آئے گا، کیونکہ مرکزی دھاگہ جہاں حکمت عملیmain()تقریب واقع ہے بھی ایک زیر التواء موضوع ہے.

یہ بیک ٹیسٹنگ سسٹم اور لائیو ٹریڈنگ ماحول کی حمایت کرتا ہے.

{@fun/Threads/threading/getThread getThread}، {@fun/Threads/threading/mainThread mainThread}، {@fun/Threads/threading/currentThread currentThread}، {@fun/Threads/threading/Lock Lock}، {@fun/Threads/threading/Condition Condition}، {@fun/Threads/threading/Event Event}، {@fun/Threads/threading/Dict Dict}، {@fun/Threads/threading/Thread Thread}، {@fun/Threads/threading/eventLoop}، {@fun/Threads/threading/eventLoop}، {@fun/Threads/threads/threading/eventLoop}،

تار

Threadاشیاء کی طرف سے پیدا یا واپس کیا جا سکتا ہےthreading.Thread(), threading.getThread(), threading.mainThread()، اورthreading.currentThread().

peekپیغام

کےpeekMessage()ایک موضوع سے ایک پیغام حاصل کرنے کے لئے استعمال کیا جاتا ہے.

کےpeekMessage()فنکشن موجودہ تھریڈ آبجیکٹ سے منسلک تھریڈ کے ذریعہ موصولہ پیغام کو لوٹاتا ہے۔

سٹرنگ، نمبر، بول، آبجیکٹ، صف، null value اور نظام کی حمایت کی دیگر اقسام

peekMessage() peekMessage ((ٹائم آؤٹ)

پیرامیٹرtimeoutis the timeout setting. یہ پیرامیٹر کے ذریعہ طے شدہ ملی سیکنڈ کی تعداد کو بلاک کرے گا اور انتظار کرے گا اور ڈیٹا واپس کرے گا۔ اگر کوئی ڈیٹا نہیں ہے اور ٹائم آؤٹ حد سے زیادہ ہے تو ، ایک null قدر واپس کردی جائے گی۔ اگرtimeout0 پر مقرر کیا جاتا ہے یاtimeoutپیرامیٹر منظور نہیں کیا جاتا ہے، اس کا مطلب یہ ہے کہ عمل بلاک اور انتظار کریں گے جب تک چینل سے ڈیٹا موصول نہیں ہوتا.timeout- 1 پر مقرر کیا گیا ہے، اس کا مطلب یہ ہے کہ عمل کو فوری طور پر ڈیٹا کو روکنے اور واپس نہیں کرے گا. اگر کوئی ڈیٹا نہیں ہے تو، ایک null قدر واپس آ جائے گی.

ٹائم آؤٹ غلط نمبر

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/Threads/Thread/join name}، {@Threads/Threads/eventLoop eventLoop}، {@fun/Threads/eventLoop eventLoop}، {@fun/Threads/eventLoop eventLoop}، {@fun/Threads/eventLoop eventLoop}، {@fun/Threads/eventLoop eventLoop}، {@fun/Threads/eventLoop eventLoop}، {@fun/Threads/eventLoop}، {@fun/Threads/eventLoop}،

پوسٹپیغام

کے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/eventLoop eventLoop}، {@fun/Threads/eventLoop eventLoop}، {@fun/Threads/Threads/eventLoop eventLoop}، {@fun/Threads/Threads/eventLoop eventLoop}، {@fun/Threads/eventLoop eventLoop}، {@fun/Threads/eventLoop}، {@fun/

شامل ہونا

کےjoin()فنکشن کا استعمال تھریڈ کے باہر نکلنے اور سسٹم کے وسائل کی بازیافت کے انتظار میں کیا جاتا ہے۔

کےThreadRetچیزعملدرآمد کے نتائج کے بارے میں اعداد و شمار پر مشتمل ہے. خصوصیات میں مندرجہ ذیل شامل ہیں:

  • id: Thread ID
  • ختم: کیا دھاگے کو ختم کرنے کے لئے مجبور کیا جاتا ہے.
  • گزرا ہوا: نینو سیکنڈ میں دھاگے کا چلنے کا وقت۔
  • 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()فنکشن اوقات باہر اور واپسی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/Threads/Thread/eventLoop eventLoop}، {@fun/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/Threads/Thread/id id}، {@fun/Threads/Threads/Thread/name name}، {@fun/Threads/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}، {@fun/Threads/eventLo

getData حاصل کریں

کےgetData()تقریب تھریڈ ماحول میں ریکارڈ متغیرات تک رسائی کے لئے استعمال کیا جاتا ہے. ڈیٹا درست ہے جب تھریڈ کو عملدرآمد نہیں کیا ہےjoin()تقریب (کامیابی سے باہر نکلنے کے لئے انتظار کر رہا ہے) اور عملدرآمد نہیں کیا ہےterminate()فنکشن (فورس کے ذریعے دھاگے کو ختم کرنا) ۔

کےgetData()تقریب کی کلید کی قیمت کے مساوی لوٹاتا ہےkeyموجودہ تھریڈ سیاق و سباق میں ذخیرہ کردہ کلیدی قدر جوڑی میں پیرامیٹر.

سٹرنگ، نمبر، بول، آبجیکٹ، صف، 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}، {@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}، {@fun/Thre

سیٹ ڈیٹا

کے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/Threads/id id}، {@fun/Threads/Thread/name name name}، {@fun/Threads/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}، {@fun/Threads/eventLoop eventLoop}،

آئی ڈی

کےid()فنکشن واپس کرنے کے لئے استعمال کیا جاتا ہےthreadIdموجودہ multithreaded اعتراض مثال کے.

کی واپسی کی قیمت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/thread/eventLoop eventLoop}، {@fun/Threads/eventLoop eventLoop}، {@fun/threads

نام

کےname()موجودہ multithreaded اعتراض مثال کا نام واپس کرنے کے لئے استعمال کیا جاتا ہے.

کے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/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 eventLoop}، {@fun/Threads/Thread/eventLoop eventLoop}، {

ایونٹ لوپ

کےeventLoop()تقریب موضوع کی طرف سے موصول ہونے والے واقعات کے لئے سننے کے لئے استعمال کیا جاتا ہے.

کےeventLoop()تقریب موجودہ موضوع کی طرف سے موصول ہونے والے واقعہ کی معلومات واپس کرتا ہے.واقعہ کی معلومات کی ساخت.

آبجیکٹ، صفر قدر

ایونٹ لوپ ((() ایونٹ لوپ (ٹائم آؤٹ)

پیرامیٹرtimeoutملی سیکنڈ میں ٹائم آؤٹ کی ترتیب ہے. اگر پیرامیٹرtimeout0 پر مقرر کیا گیا ہے تو ، یہ واپسی سے پہلے کسی ایونٹ کے ہونے کا انتظار کرے گا۔ اگر یہ 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()
}

تین تھریڈز کو بیک وقت چلائیں اور موصولہ واقعہ کی معلومات کو آؤٹ پٹ کریں۔ اگر ٹائم آؤٹ ہوتا ہے یا فنکشن فوری طور پر واپس آجاتا ہے تو ، آؤٹ پٹ ویلیو 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 name}، {@fun/Threads/Thread/name name name}،

تھریڈلاک

تھریڈ لاک آبجیکٹ، کثیر تھریڈ مطابقت پذیری پروسیسنگ کے لئے استعمال کیا جاتا ہے.

حاصل کرنا

کےacquire()فنکشن کا استعمال تھریڈ لاک (لاک) کی درخواست کرنے کے لئے کیا جاتا ہے۔

حاصل کرنا

براہ مہربانی ملاحظہ کریںthreading.Lock()مثالوں کے لئے سیکشن.

کےacquire()تقریب ایک موضوع مقفل کرنے کی درخواست کرنے کے لئے استعمال کیا جاتا ہے.acquire()تھریڈ لاک آبجیکٹ کی تقریب ، یہ لاک حاصل کرنے کی کوشش کرتا ہے۔ اگر لاک فی الحال کسی دوسرے تھریڈ کے ذریعہ نہیں رکھا گیا ہے تو ، کال کرنے والا تھریڈ لاک کو کامیابی کے ساتھ حاصل کرتا ہے اور عملدرآمد جاری رکھتا ہے۔ اگر لاک پہلے ہی کسی دوسرے تھریڈ کے ذریعہ رکھا گیا ہے تو ، تھریڈ کال کرنے والاacquire()جب تک قفل کو جاری کیا جاتا ہے بلاک کیا جائے گا.

{@fun/Threads/threading/Lock Lock}، {@fun/Threads/ThreadLock/release release}

رہائی

کےrelease()فنکشن کا استعمال تھریڈ لاک (انلاک) کو کھولنے کے لئے کیا جاتا ہے۔

رہائی

function consumer(productionQuantity, dict, pLock, cLock) {
    for (var i = 0; i < productionQuantity; i++) {
        pLock.acquire()
        cLock.acquire()
        var arr = dict.get("array")
        var count = arr.shift()
        dict.set("array", arr)
        Log("consumer:", count, ", array:", arr)
        cLock.release()
        Sleep(1000)
        pLock.release()
    }
}

function producer(productionQuantity, dict, pLock, cLock) {
    for (var i = 0; i < productionQuantity; i++) {
        cLock.acquire()   // cLock.acquire() placed after pLock.acquire() will not cause deadlock
        pLock.acquire()   
        var arr = dict.get("array")
        arr.push(i)
        dict.set("array", arr)
        Log("producer:", i, ", array:", arr)
        pLock.release()
        Sleep(1000)
        cLock.release()
    }
}

function main() {
    var dict = threading.Dict()
    dict.set("array", [])
    var pLock = threading.Lock()
    var cLock = threading.Lock()
    var productionQuantity = 10
    var producerThread = threading.Thread(producer, productionQuantity, dict, pLock, cLock)
    var consumerThread = threading.Thread(consumer, productionQuantity, dict, pLock, cLock)

    consumerThread.join()
    producerThread.join()
}

تعطل کے منظرنامے کی جانچ

یہ نوٹ کیا جانا چاہئے کہ تاروں کے تالے کا غلط استعمال جمود کا باعث بن سکتا ہے۔

{@fun/Threads/threading/Lock Lock}، {@fun/Threads/ThreadLock/acquire acquire}

تھریڈ واقعہ

ایونٹ آبجیکٹ، کثیر تھریڈ ایونٹ نوٹیفکیشن اور سگنل کے لئے استعمال کیا جاتا ہے.

سیٹ

کےset()تقریب واقعات (سیٹ سگنل) کو مطلع کرنے کے لئے استعمال کیا جاتا ہے.

سیٹ (()

براہ مہربانی ملاحظہ کریںthreading.Event()مثالوں کے لئے سیکشن.

اگر سگنل کا استعمال کرتے ہوئے مقرر کیا گیا ہےset()، یہ دوبارہ مقرر نہیں کیا جا سکتا. ہم سگنل کو صاف کرنے اور اسے دوبارہ مقرر کرنے کی ضرورت ہے.

{@fun/Threads/ThreadEvent/clear clear}، {@fun/Threads/ThreadEvent/wait wait}، {@fun/Threads/ThreadEvent/isSet isSet}

صاف

کےclear()سگنل کو صاف کرنے کے لئے استعمال کیا جاتا ہے.

صاف (()

براہ مہربانی ملاحظہ کریںthreading.Event()مثالوں کے لئے سیکشن.

{@fun/Threads/ThreadEvent/set set}، {@fun/Threads/ThreadEvent/wait wait}، {@fun/Threads/ThreadEvent/isSet isSet}

انتظار کرو

کےwait()تقریب ایک واقعہ (سگنل) انتظار مقرر کرنے کے لئے استعمال کیا جاتا ہے، اور واقعہ (سگنل) مقرر کیا جاتا ہے اس سے پہلے بلاک کرے گا؛ یہ ایک ٹائم آؤٹ پیرامیٹر کی ترتیب کی حمایت کرتا ہے.

کےwait()فنکشن واپس کرتا ہے کہ آیا ٹائم آؤٹ ہوا ہے۔ اگر ایسا ہے تو ، یہ ایک حقیقی قدر واپس کرتا ہے۔

بول

انتظار کرو انتظار (ٹائم آؤٹ)

کےtimeoutپیرامیٹر ملسی سیکنڈ میں انتظار کا وقت مقرر کرنے کے لئے استعمال کیا جاتا ہے.

ٹائم آؤٹ غلط نمبر

function main() {
    var event = threading.Event()
    var t1 = threading.Thread(function(event) {
        var ret = event.wait(100)
        Log(`event.wait(100):`, ret)
        ret = event.wait()
        Log(`event.wait():`, ret)
    }, event)

    Sleep(1000)
    event.set()
    t1.join()
}

کی واپسی کی قیمت کی جانچ کریںwait() function.

{@fun/Threads/ThreadEvent/set set}، {@fun/Threads/ThreadEvent/clear clear}، {@fun/Threads/ThreadEvent/isSet isSet}

isSet

کےisSet()تقریب کا استعمال کیا جاتا ہے اس بات کا تعین کرنے کے لئے کہ آیا ایک واقعہ (سگنل) مقرر کیا گیا ہے.

کےisSet()فنکشن لوٹاتا ہے کہ آیا واقعہ (سگنل) مقرر کیا گیا ہے۔ اگر واقعہ (سگنل) مقرر کیا گیا ہے تو ، یہ ایک حقیقی قدر لوٹاتا ہے۔

بول

isSet()

براہ مہربانی ملاحظہ کریںthreading.Event()مثالوں کے لئے سیکشن.

{@fun/Threads/ThreadEvent/set set}، {@fun/Threads/ThreadEvent/clear clear}، {@fun/Threads/ThreadEvent/wait wait}

تھریڈCondition

حالت کا اعتراض، کثیر تھریڈ ہم وقت سازی کے لئے استعمال کیا جاتا ہے.

مطلع کرنا

کےnotify()فنکشن انتظار میں تھریڈ (اگر کوئی ہے تو) کو بیدار کرنے کے لئے استعمال کیا جاتا ہے. صرف تھریڈ ہے کہ بلایا ہےwait()طریقہ کار جاگ جائے گا.

مطلع کریں

function consumer(dict, condition) {
    while (true) {
        condition.acquire()
        while (dict.get("array").length == 0) {
            Log(threading.currentThread().name(), "wait()...", ", array:", dict.get("array"))
            condition.wait()
        }
        var arr = dict.get("array")
        var num = arr.shift()
        Log(threading.currentThread().name(), ", num:", num, ", array:", arr, "#FF0000")
        dict.set("array", arr)
        Sleep(1000)
        condition.release()
    }
}

function main() {
    var condition = threading.Condition()
    var dict = threading.Dict()
    dict.set("array", [])
    var t1 = threading.Thread(consumer, dict, condition)
    var t2 = threading.Thread(consumer, dict, condition)
    var t3 = threading.Thread(consumer, dict, condition)
    Sleep(1000)
    var i = 0
    while (true) {
        condition.acquire()
        var msg = ""
        var arr = dict.get("array")
        var randomNum = Math.floor(Math.random() * 5) + 1
        if (arr.length >= 3) {
            condition.notifyAll()
            msg = "notifyAll"
        } else {
            arr.push(i)
            dict.set("array", arr)
            if (randomNum > 3 && arr.length > 0) {
                condition.notify()
                msg = "notify"
            } else {
                msg = "pass"
            }
            i++
        }

        Log(_D(), "randomNum:", randomNum, ", array:", arr, ", msg:", msg)
        condition.release()
        Sleep(1000)
    }
}

استعمال کریںnotify()فنکشن انتظار کے دھاگے کو بیدار کرنے کے لئے.

کےnotify()فنکشن انتظار کی قطار میں ایک موضوع کو بیدار کرتا ہے.

جبnotify()تقریب ایک دھاگہ کو بیدار کرتا ہے، دھاگہ دھاگہ مقفل دوبارہ حاصل کرے گا.

{@fun/Threads/ThreadCondition/notifyAll notifyAll}، {@fun/Threads/ThreadCondition/wait wait}، {@fun/Threads/ThreadCondition/acquire acquire}، {@fun/Threads/ThreadCondition/release release}

سب کو مطلع کریں

کےnotifyAll()تقریب انتظار کر رہے ہیں تمام موضوعات کو جاگتا ہے.

سب کو مطلع کریں

براہ مہربانی ملاحظہ کریںThreadCondition.notify()مثالوں کے لئے سیکشن.

کےnotifyAll()فنکشن ایک ایک کر کے تمام انتظار کر رہے موضوعات کو بیدار کرتا ہے، اور بیدار موضوعات تھریڈ لاک دوبارہ حاصل کرتے ہیں.

{@fun/Threads/ThreadCondition/notify notify}، {@fun/Threads/ThreadCondition/wait wait}، {@fun/Threads/ThreadCondition/acquire acquire}، {@fun/Threads/ThreadCondition/release release}

انتظار کرو

کےwait()فنکشن استعمال کیا جاتا ہے کچھ ڈیزائن حالات کے تحت ایک thread انتظار کرنے کے لئے.

انتظار کرو

براہ مہربانی ملاحظہ کریںThreadCondition.notify()مثالوں کے لئے سیکشن.

کےwait()فنکشن تھریڈ لاک کو جاری کرتا ہے اور جب جاگتا ہے تو تھریڈ لاک کو دوبارہ حاصل کرتا ہے۔

{@fun/Threads/ThreadCondition/notify notify}، {@fun/Threads/ThreadCondition/notifyAll notifyAll}، {@fun/Threads/ThreadCondition/acquire acquire}، {@fun/Threads/ThreadCondition/release release}

حاصل کرنا

کےacquire()فنکشن کا استعمال تھریڈ لاک (لاک) کی درخواست کرنے کے لئے کیا جاتا ہے۔

حاصل کرنا

براہ مہربانی ملاحظہ کریںThreadCondition.notify()مثالوں کے لئے سیکشن.

استعمال سے پہلےwait()، آپ کو موجودہ حالت آبجیکٹ کی تھریڈ لاک کی درخواست کرنے کی ضرورت ہے.

{@fun/Threads/ThreadCondition/notify notify}، {@fun/Threads/ThreadCondition/notifyAll notifyAll}، {@fun/Threads/ThreadCondition/wait wait}، {@fun/Threads/ThreadCondition/release release}، {@fun/ThreadCondition/ThreadCondition/release release}، {@fun/ThreadCondition/ThreadCondition/notifyAll notifyAll}، {@fun/Threads/ThreadCondition/wait wait}، {@fun/Threads/ThreadCondition/release release}، {@fun/ThreadCondition/ThreadCondition/release release}، {@fun/ThreadCondition/release release}

رہائی

کےrelease()فنکشن کا استعمال تھریڈ لاک (انلاک) کو کھولنے کے لئے کیا جاتا ہے۔

رہائی

براہ مہربانی ملاحظہ کریںThreadCondition.notify()مثالوں کے لئے سیکشن.

استعمال کے بعدwait()، ہم موجودہ حالت آبجیکٹ کی تھریڈ لاک (انلاک) کو جاری کرنے کی ضرورت ہے.

{@fun/Threads/ThreadCondition/notify notify}، {@fun/Threads/ThreadCondition/notifyAll notifyAll}، {@fun/Threads/ThreadCondition/wait wait}، {@fun/Threads/ThreadCondition/acquire acquire}

ThreadDict

لغت کا اعتراض، ڈیٹا شیئرنگ کے لیے استعمال کیا جاتا ہے۔

حاصل کرنا

کےget()تقریب لغت اعتراض میں ریکارڈ کلید قدر حاصل کرنے کے لئے استعمال کیا جاتا ہے.

کےget()تقریب کی طرف سے مخصوص کلید کی قدر لوٹاتاkey parameter.

سٹرنگ، نمبر، بول، آبجیکٹ، صف، null value اور نظام کی حمایت کی دیگر اقسام

حاصل (کلید)

کےkeyپیرامیٹر مطلوبہ کلید کے مطابق کلیدی نام کی وضاحت کرنے کے لئے استعمال کیا جاتا ہے.

چابی سچ سٹرنگ

function main() {
    var event = threading.Event()
    var dict = threading.Dict()
    dict.set("data", 100)
    
    var t1 = threading.Thread(function(dict, event) {
        Log(`thread1, dict.get("data"):`, dict.get("data"))
        
        event.set()
        event.clear()
        
        event.wait()
        Log(`after main change data, thread1 dict.get("data"):`, dict.get("data"))
    
        dict.set("data", 0)
    }, dict, event)
    
    event.wait()
    
    dict.set("data", 99)
    
    event.set()
    event.clear()
    
    t1.join()
    Log(`main thread, dict.get("data"):`, dict.get("data"))
}

ایونٹ آبجیکٹ کا استعمال کرتے ہوئے ڈیٹا کو پڑھنے اور ترمیم کرنے کے لئے تھریڈز کو مطلع کریں.

{@fun/Threads/ThreadDict/set set} {@fun/Threads/ThreadDict/set set} {@fun/Threads/ThreadDict/set set} {@fun/Threads/ThreadDict/set set}

سیٹ

کےset()تقریب ایک کلید قدر جوڑی مقرر کرنے کے لئے استعمال کیا جاتا ہے.

سیٹ (کلید، قدر)

پیرامیٹرkeyتبدیل کرنے کے لئے کلیدی نام کی ترتیب کے لئے استعمال کیا جاتا ہے.

چابی سچ سٹرنگ پیرامیٹرvalueتبدیل کرنے کے لئے کلیدی قدر مقرر کرنے کے لئے استعمال کیا جاتا ہے.

قیمت سچ string، number، bool، object، array، function، null value اور نظام کی حمایت کی دیگر اقسام

function main() {
    var dict1 = threading.Dict()
    dict1.set("func1", function(p) {
        Log("func1 p:", p)
    })
    
    threading.Thread(function(dict1) {
        var func1 = dict1.get("func1")
        func1("test")
    }, dict1).join()
}

یہ فنکشن میں کلیدی قدر منتقل کرنے کی حمایت کرتا ہے.

{@fun/Threads/ThreadDict/get get} {@fun/Threads/ThreadDict/get get}

نیٹ سیٹنگز ویب3