 بسم اللہ الرحمن الرحیم آج ہم موڈیول 113 دیسکاس کریں گے یہ موڈیول ہے about exiting thread اس میں ہم دیکھیں گے کہ آپ کوئی اگر thread execute ہوری ہے تو اسے exit کیسے کر سکتے ہیں اور once اگر اسے exit کر جاتے ہیں تو عم طور پہ exit code بھی return ہوتی جس طرح process کے کس میں return ہوتی اس طرح سے thread کے کس میں بھی return ہوتی تو وہ exit code آپ کیسے get کر سکتے ہیں فسلی اگر ایک آپ کی thread execute ہوری ہے اور کسی point پہ آپ سمجھتے ہیں کہ آپ نے اپنی اس thread کو ختم کر دےنا exit کر دےنا تو اس کے لیے بڑی سیمپل سی ایک API available ہے exit thread exit thread کے آپ API call کریں گے تو وہاں پہیہ آپ کی thread function ہے اس کی execution رکھ جائے گی اور وہ والی thread ختم ہو جائے گی ملٹپل کئی thread شال رہی ہیں ان میں سے ایک thread exit thread call کرتی ہے تو وہاں پہیہ اس thread کی execution ختم ہو گئی alternatively دوسرا کیا ہوسکتا ہے کہ جنجوں thread کی execution ہوری ہے کہلیں کہ ایک loop کے اندر execution ہوری ہے loop ختم ہو جاتا ہے اور in the end وہ ہے تو basically ایک function ہی thread جو ہے وہ ایک simple function کی طرحیں آپ نے implement کیا ہے اور وہ function جبہاں return کر جاتا ہے جب اس کی execution کمپلیٹ ہو جاتی ہے تو ہم سمجھیں گے کہ thread کی execution ختم ہو گئی ہے thread return کر گئی ہے thread کی execution return کر گئی ہے تو عام flow کے اندر جب ہماری thread ختم ہو جائے گی اور آپ return کر جاتے ہیں تو اس کا مطلب ہے thread کی execution ختم ہو گئی ہے اور پہلے کہ اس کے اندر اگر آپ سپسیفہکلی explicitly خود سے thread کی execution ختم کرنا جاتے ہیں تو آپ exit thread کا function call کریں گے ان دونوں کسیس کے اندر جو thread کی execution ہے وہ ختم ہو جاتی ہے اور آپ کہلیں کہ certain actions عقر ہوتے ہیں اس thread کے ختم ہونے کی وجہ سے ایک action تو یہ سمجھتا ہے کہ جب thread allocate ہوئی تھی جب thread create ہوئی تھی تو stack کے لیے کچھ memory allocate ہوئی تھی اب وہ thread ختم ہو گئی ہے تو stack کے لیے جو وہ memory allocate ہوئی تھی وہ deallocate ہو جائے گی اور اگر کوئی handles ہیں جوکہ اس thread کو point کریں تو وہ handle جو ہوتے ہیں وہ signal ہو جاتے ہیں signal کا مطلب اس طرح سے ہے کہ ایک طرح سے وہ invalidate ہو جاتے ہیں لیکن اس کے لئے پھر بھی thread کی information جو ہے وہ رہتی ہے اور اس information کو اگر آپ get کرنا چاہیں تو اس کے لیے بھی ہمارے پاس ایک three کے کار ہے تو وہ signal ہو جاتے ہیں بہت سے تو نہیں use ہو سکتے لیکن آپ اس طرح سے use کر سکتے ہیں کہ جب یہ previous thread run ہوئی تھی اس کا جو بھی status ہے اس status کو آپ get کر سکے پھر اسی طرح سے اگر وہ thread ہو سکتا ہے کہ کسی dll کو use کرا ہو کسی dll کو اس نے open کیا ہو تو وہ dll جو ہے اس thread کے ساتھ attach ہو گئی ہے اگر dll attach ہو گئی ہے تو جب thread complete ہو جاتا ہے تو واپس dll کو detach کبھی message جانا چاہی ہے اس کو پتا چاہے نا چاہی ہے کہ وہ جس thread کے ساتھ attach تھی وہ thread detach ہو گئی ہے ختم ہو گئی ہے تو اس صورت میں بھی جو dll main کو ہے message آتا ہے dll thread detach کا جو بھی اس کے ساتھ dll attach نا ایک ہیں دو ہیں جتنی بھی dll اس thread کے ساتھ attach نہیں انساروں کو dll thread detach کا message آتا ہے یہ previously آپ نے دیکھا ہے کہ یہ garbage collection کے لیے ضروری ہوتا ہے کہ dll کے اندر اگر کوئی allocations ہوئی بھی ہیں تو وہ سارے جو ان چیزوں کو resources کو deallocate کیا جا ہے اس لیے ضروری ہوتا ہے تو dll جتنی بھی attach ہوں گی thread کے ساتھ ان کو dll detach کا message چلا جائے گا thread کو exit کرنے کے لیے بڑا سیمپل سا function ہے اگر آپ کی thread execute ہو رہی ہے execution کے دوران آپ دیسائیٹ کرتے ہیں کہ ایک سرطن condition کے بعد آپ کہتے ہیں کہ جی آپ thread کو exit ہو جا نا چاہی ہے تو آپ اس function کو سیمپلی call کر سکتے ہیں exit thread کا function ہے اور اس کو صرف ایک چیز آپ نے پاس کرنی exit code کہ جب یہ thread exit ہو گئی تو کیا code return کرے اب ہم نے دیکھا ہے کہ windows یہ multi threading کو support کرتا ہے اس کا مطلب ہے ایک process جو ہے اس process کے اندر کئی ساری threads ہو سکتے ہیں ایک process تب تک terminate نہیں ہوگا اور جب تک اس کے اندر جتنی بھی threads ہیں وہ اپنی execution complete نکار لیتے ہیں ایک process کے اندر کمسکم ایک thread تو ضرور ہوتی جاگر ایک thread بھی ہے تو process کی execution چال رہی ہے اور جب ساری threads جو ہے وہ complete ہو جا گی return کر جا گی exit کر جا گی تو process جو ہے وہ terminate ہو جا گا ختم ہو جا گا اگر آپ چاہتے ہیں کہ جی آپ کی کوئی number of threads چال رہی ہے اور کوئی ایک thread کسی دوسری thread کو terminate کرے تو اس کے لیے بھی طریقہ کار available ہے اس کے لیے ہمارے پاس API مجود ہے terminate thread آپ terminate thread کی API call کر کے کسی بھی thread کو terminate کر سکتے ہیں لیکن ایسا کرنے پہ یہ ایک طرح کی abnormal termination ہے ایسا کرنے پہ کیا ہوگا کہ جو normally thread کے exit ہونے کی وجہ سے operations perform ہوتے ہیں وہ operations perform نہیں ہو سکیں گے وہ کون کون سے operations perform ہوتے ہیں جسنا stack کی dl location ہے جو dls کو notification جاتا ہے ڈیٹاچ ہونے کا جو garbage collection کیلئے جو information جاتی ہے وہ ساری information جو ہے وہ generate نہیں ہو سکے گی تو جو اگر completion handlers ہیں ان کو garbage collection کیلئے جو information جائے گی وہ بھی generate نہیں ہو سکے گی تو اس لیے کہا جاتا ہے کہ جو terminate thread ہے اس کا استعمال نہ کریں بلکل نہ کریں یا بہت ہی اشت ضرورت کی اندر کریں terminate thread سے کیونکہ جو garbage collection کا operation وہ perform نہیں ہوگا آپ کی memory جو وہ waste ہوتی رہی اچھا اب فرز کریں آپ کی ایک thread run ہوتی تھی آپ کے پاس اس کا handle ہے اب کیا ہوتا ہے کہ thread کی completion ہوتی کسی بھی وجہ سے exit thread کی وجہ سے یا اس کی ویسے processing complete ہوگی اب ویسے تو اس کا flow ختم ہوگی ہے execution ختم ہوگی ہے لیکن اس کیلئے جو object ہے وہ ابھی بھی exist کرتا اور وہ thread اس کا reference ہے وہ تب تک exist کرے گا جب تک آپ جتنے بھی اس کے references ہیں ان تمام references کے پر close handle نہیں call کرلتے کم اس کم ایک اس کا reference ڈلور ہوگا اور جب تک جو last reference اس کا ڈائنی جاتا آپ اس کے پر close handle نہیں call کرلتے تو آپ سمجھتے ہیں کہ thread کا object وہ memory کی اندر exist کرتا رہے گا ایک ایک thread کیا آپ کو بتا کہ کئی objects ہو سکتے ہیں ایک objects کی کئی copies ہو سکتی ہیں thread basically ایک object ہے وہ اس object کی کئی copies ہو سکتی ہیں آپ نے ایک object copy کو destroy کیا دوسی کو کیا ایک کو close کیا دوسی کو کیا اب اس طرح جتنے بھی آپ نے copies بنائی ان ساروں کو جب تک close نہیں کرتا ہے thread جو ہے وہ exist کرے گا اس کا status اس کی information operating system کے data structures کے اندر درہیں گی اور جب تک یہ information رہے گی تو کوئی دوسری threads ہیں وہ threads اس information کو get بھی کر سکتی ہیں اس information کو operating system کے data structures میں سے کسی طریقے سے read بھی کر سکتی ہیں اگر آپ کی ایک thread کمپلیٹ ہوگی ہے اور اس کی exit code get کرنا چاہتے ہیں یا کوئی بھی ایک thread ہے arbitrary thread آپ کو نہیں پڑھا کمپلیٹ ہوئی ہے یا بھی چل رہی ہے اس کا status آپ کو نہیں پڑھا اور آپ اس کی exit code وہ get کرنا چاہتے ہیں تو بڑی اسانی سے get کی جا سکتی ہے اگر آپ کو اس thread کے handle کا بتا اگر اس کا handle close نہیں ہوا handle exist ہوتا کرتا ہے تو اس handle کے through آپ اس thread کی exit code جوہا اس کو get کر سکتے ہیں چاہے وہ اس thread کی execution کمپلیٹ ہوگی ہے چاہے وہ ابھی بھی thread چال رہی ہے یہ کیسے کریں گے اس کے لیے ایک API windows provide کرتی ہے get exit code thread آپ اس API کو call کریں گے اس کو اس thread کا handle pass کریں گے handle کیوںکہ exist کرتا handle اس کو pass کریں گے اور آپ کے پاس ایک pointer pass کریں گے reference pass کریں گے اس کے اندر اس pointer کے اندر یہ w exit code کے نام سے آپ کو یہاں پر نظر آ رہا ہے دوسرا جو اس کا parameter ہے اس pointer کے اندر exit code آ جائے گے اس reference کے اندر exit code آ جائے گے اگر تو وہ thread complete ہوگی ہے اور thread complete exit کے through ہی ہے اور اسے کوئی exit code pass کی گئی ہے تو وہ exit code کی value ہوگی وہ اس reference کے اندر آ جائے گی اس reference کے through access ہو جائے گی ان کے اس وہ thread ابھی بھی چل رہی ہے آپ کو نہیں اس thread کے بارے میں بتا اور شاید وہ now complete نہیں ہوئی اور ابھی بھی چل رہی ہے تو اس case کے اندر exit code کی value ہوگی وہ still active کے برابر ہوگی still active ایک constant ہے جو کہ already windows.h کے اندر defined ہے تو اس طریقے سے آپ کسی بھی thread کا status دیکھ سکتیں گے یا تو وہ still active ہے اگر still active نہیں ہے تو وہ complete ہوگی اور جب complete ہوگی ہے تو اس کے exit code کیا exit code کو دیکھ کے یہ پتہ لکھ سکتا ہے کہ normally وہ terminate ہوگی ہے یا اب normally terminate ہوگی ہے