 بسم اللہ الرحمن الرحیم، آج ہم موڈیول 59 دیسکس کریں گے موڈیول 59 ہے console control handlers جس طرح ہم نے previously exceptions کو دیسکس کیا ہے exceptions handlers دیسکس کیا ہے کہ جب بھی ایک پوگرام کی ایکزیکیوشن کے ذران کوئی ایسی unexpected operation ہو جاتا تو اس کے results میں ایک exception نہ کرو تھی control handlers بھی تقریبا نسی طرح کی چیزا بس اس کس میں تھوڑا سے دیفرنس یہ ہے کہ جو console control handlers وہ console سے related certain events کو حنڈل کرنے کے لیے use ہوتے ہیں عام طور پہ جو normal ہماری exception ہوتی ہے وہ کسی unexpected task or unexpected event کو for example جساں میں دیکھا تھا dvn by 0 ہے اگر کن dvn by 0 ہو جاتی ہے فائد over flow ہو جاتا ہے یا کوئی unexpected or invalid instruction آجاتی ہے invalid page fault ہوتا ہے تو اس کے results میں یہ ساری exceptions نہ کرو تھی لیکن console کی کس کے اندر control handlers کی کس کے اندر یہ handlers than being walk ہوتے ہیں جب console سے related کئی event؟ جیسے کہ اگر کوئی user جو ہے وہ کنٹرول سی کی بورٹ سے اگر پریس کرتا تو اس کے رزالت میں ہمارا کوئی کنسول کنٹرول ہندلر جو ہے وہ ایکزیکیوٹ ہو سکتا اس کے لیو اور بھی کچھ ایوانٹس ہے کنسول سے ہی رلیٹد جو کہ یہ ہندلرز دیت کرتے ہیں اور اس کے رزالت میں یہ اپنا اپنا اپریشن پرفوم کرتے ہیں آپ نے اگر کوئی کنسول کنٹرول ہندلر use کرنا اپنے پوکرم کے اندر تو آپ کو کنسول کنٹرول ہندلر ڈیڈ کرنا پڑے گا وہ as a function as a call back function کے طور پر لکھا جائے گا اور اس کنٹرول کنٹرول ہندلر کو آپ کو windows کو پتانا پڑے گا کہ اس کنسول کنٹرول ہندلر کو ہم use کرے ہیں windows کے پاس اس کنسول کنٹرول ہندلر کو register کرنے کے لیے جو function use ہوتا وہ ہے set console control ہندلر یہ API آپ call کریں گے اور اس API کے result میں آپ کا ہندلر جو ہے وہ windows کے پاس register ہوگا اس function کی ہم detail دیکھتے ہیں اس function کے اندر آپ دیکھ سکتے ہیں کہ اس کی return type Boolean ہے اور اس function کو کیا چیز پاس کی جا رہی ہے ایک آپ جو function بنائیں گے ایک procedure بنائیں گے اس کا ڈرس پاس کیا جا رہا ہے جس کو جس کے لیے ایک ڈائپ بھی دیوئے پی ہندلر routine یا آپ کیا بسکلی ہندلر routine ہے اور دوسرہ اس کا پیرامیٹر جو ہے وہ Boolean ہے وہ اس کو ہم نے add کا نام دیا تو دو اس کے اندر آپ کو پیرامیٹرز نظر آ رہے ہیں جب کہ اس کی return type جو ہے وہ Boolean ہے آپ ایک مقت میں کئی console ہندلرز کو add کر سکتے ہیں اگر ایک سے زیادہ ہندلرز آپ use کرے ہیں تو subsequent ہندلرز کو add کرنے کے لیے جو پیرامیٹر use ہوتا ہے وہ add والا پیرامیٹر ہوتے ہیں اگر add کو آپ true کرتے ہیں تو آپ true کر کے اور مزید ہندلرز کو add کر سکتے ہیں اور اس طرح ہندلرز کی چین بنائسکتے ہیں اور جو ہندلرز روٹین کا پیرامیٹر ہے اس کو اگر آپ null کر دیں اور add والا جو ہے اس کو آپ true کر دیں تو اس کیس میں یہ جو console جتنے بھی سیکنلز ہیں وہ discard ہو جاتے ہیں ان کے اوپر کوئی windows action پرفارم نہیں کرتی لیکن اگر آپ ہندلرز کی جگہ کسی اپنے ایک function کا ہندلرز کا place کر دیں تو جب بھی ایک action پرفارم ہوگا console کا تو وہ ہندلر انوک ہوگا اور اس ہندلر کو آپ پھر process کر سکتے ہیں ہندلروٹین کیسے لکھیں گے اس کو روٹین کو لکھنے کیلئے بھی یہ کچھ syntax ہے اس کو آپ دیکھیں ہندلروٹین کی return ڈیپ جو ہے وہ بولین ہو لی چاہیے اور اس کو جسٹ ایک پیرامیٹر پاس ہوگا جوکہ کنٹرول ڈیپ اور اس کی بسکلی value جس کی جو ڈیٹر ڈیپ ہے that is a ڈبلورڈ تو یہ آپ کو کنٹرول ڈیپ بتایا گا کہ کس طرح کا کنٹرول ڈیپ اکر ہویا اس کے اندر ڈیپ کو جمیسی ہے اس کا مثلم ہے کہ user ڈیپ کرنے کی کوشتکا رہا ہے یہاں بھی یہ بتانا بہت ضروری ہے یہ جو console ڈیپ نڈلر یہ ایک ڈیپ انڈیٹر ڈیپ کے طور پیران ہوتا ڈیپ جو ہوتی ہے جس کسی ڈیپ کے اندر آپ نے لکیا اس ڈیپ کو وہ ڈیپ کرتی ہے اگر ڈیپ ڈیپ ڈیپ ڈیپ کے اندر جو بھی آپ ڈاس پرفارم وہ اس تھریڈ کے اوپریشن سے ریلیونٹ ہیں تو وہ تھریڈ کا اوپریشن سے افیکٹ ہوگا جبکہ یہ جو کنسول کنٹرول ہیلڈر آپ نے لکھا یہ ایک دفرن تھریڈ میں رانا ہو رہا سیگنلز جو ہوتے ہیں جسا یہ کنٹرول سی کنٹرول بریگ یہ سیگنل ہے یہ سیگنلز جو ہے ان کا سکوب اور the whole process ہے یہ پورے process کو افیکٹ کرے گا تو یہ جو کنٹرول ہیلڈر ہے اس لیے ایک علک سے تھریڈ کے اندران ہوتے ہیں جس تھریڈ کے اندر آپ نے کنٹرول سی پریس کیا یا جس تھریڈ کے اندر آپ نے کنٹرول ہیلڈر کو رجسٹر کیا ضروری نہیں ہے کہ وہ اس تھریڈ کے اندرانوں اس کے لیے علک سے ایک تھریڈ ران ہوگی تو جو اصل تھریڈ ہے جس کے اندر آپ نے اس کو رجسٹر کیا تھا اس تھریڈ کے اوپر اس چیز کا کوئی افیکٹ نہیں آئے گا جب بھی کنٹرول سی پریس کریں گے یہ آپ کی علک سے جو اندپینٹنٹ تھریڈ ہے کنٹرول ہینڈر کی کنٹرول ہینڈر کا جو لوجک ہے وہ ہی دیسائٹ کرے گا کہ اس نے کیا اپریڈشن پرفوم کیا تو سیگنلز جو ہے یہ پورے process کے اوپر اپلائے ہوتے ہیں جب کے ایک سپشن جو ہے وہ ایک سنگل تھریڈ کے اوپر اپلائے ہوتی ہے جب بھی کوئی console سے کوئی بھی operation ہوتا ہے جسے کہ کنٹرول سی پریس ہوئے یا کسی نے کلوز کرنے کی کوشش کیا ہے یا log of ڈا کرو ہے تو اس کس کے اندر یہ ہینڈر جو ہے execute ہوگا عم طور پہ یہ جو کنٹرول ہینڈرز ہیں کنٹرول ہینڈرز اس لیے لکھے جاتے ہیں تاکہ clean up tasks پرفوم کیا جا سکیں یعنی کہ for example user اگر log off ہوا ہے تو log off ہونے سے پہلے آپ کے program کے اندر جو جو اس نے resources acquire کیا ہم انڈوز کو ان سارے resources کو اس نے relinquish بھی کرنے تو ان resources کو relinquish کیا جا سکے تو یہ ہینڈر کیا کرے گا ان resources کو relinquish کرنے کی کوشش کرے گا اگر کوئی memory allocate ہوئی ہے تو memory کو de allocate کرنے کی کوشش کرے گا اگر کوئی objects کے hendels open ہیں تو ان hendels کو کلوز کرنے کی کوشش کرے گا file hendels open ہیں تو file hendels کو کلوز کرنے کی کوشش کرے گا اگر signal hendeler جو ہے وہ اپنا جو بھی اس کا task تھا وہ perform کر لیتا تو اس case کے اندر وہ چاہتا ہے کہ آگے کوئی اور signal hendeler call نہ ہو تو وہ کیا کرتا ہے وہ true return کرتا کیونکہ ہم نے دیکھا ہے کہ آپ ایک سے زادہ signal hendeler جو ہے ان کو بھی register کر سکتے ہیں اگر signal hendeler سمجھتا ہے کہ جو اس کا task تھا اس نے perform کر لیا اور چین کے اندر جو باقی کو signal hendeler ہے ان میں سے کسی hendeler کو call کرنے کی ضرورت نہیں ہے تو اس case میں یہ true return کرے گا اگر یہ false return کرتا ہے تو اس case کے اندر باقی کی chain جو ہے وہ پھر traverse ہو کہ windows دیکھے گی اگلی chain کے اندر اگلہ کونسا signal hendeler ہے اس کو invoke کرے گا پھر آگے اگر وہ بھی false return کرتا ہے تو پھر اس سے اگلہ invoke ہوگا and so on جب تاکہ true نہیں مل جاتا ہے اور یہ جو chain بنتی ہے یہ reverse order میں بنتی ہے اگر آپ نے ایک hendeler 1 کو register کیا پھر hendeler 2 کو register کیا پھر hendeler 3 کو register کیا تو event اکر ہونے پہ سب سے پہلے hendeler 3 invoke ہوگا hendeler 3 اگر false return کرتا ہے تو پھر hendeler 2 return ہوگا hendeler 2 اگر false return کرتا ہے تو پھر hendeler 1 return ہوگا یعنی کہ reverse order میں leaf order کے اندر یہ جو chain ہے traverse ہوتی ہے of console control hendeler اور اگر ان میں سے کوئی بھی hendeler اس کو hendeler نہیں کرتا تو in the end system hendeler رہا جاتا ہے تو بالکل end of the chain کے اوپر جو hendeler پڑا ہوا ہے that is the system hendeler