কোনও প্রোগ্রাম সাড়া না দিলে উইন্ডোজ কীভাবে জানতে পারে? এটি কি ক্রমাগত সমস্ত চলমান অ্যাপ্লিকেশনগুলিকে পোলিং করে রাখে?
কোনও প্রোগ্রাম সাড়া না দিলে উইন্ডোজ কীভাবে জানতে পারে? এটি কি ক্রমাগত সমস্ত চলমান অ্যাপ্লিকেশনগুলিকে পোলিং করে রাখে?
উত্তর:
একটি অ্যাপ্লিকেশন উইন্ডোজ দ্বারা সরবরাহিত একটি সারি থেকে ইভেন্টগুলি পায়।
যদি অ্যাপ্লিকেশন কিছুক্ষণ (5 সেকেন্ড) জন্য ইভেন্টের প্যাকেজটি পোল না করে, উদাহরণস্বরূপ দীর্ঘ গণনা করার সময়, উইন্ডোজ ধরে নেয় যে অ্যাপ্লিকেশনটি স্তব্ধ হয়ে গেছে এবং ব্যবহারকারীকে সতর্ক করে।
অ্যাপ্লিকেশনগুলির কর্মীদের থ্রেডগুলিতে ব্যয়বহুল গণনা ঠেকানো উচিত বা প্রক্রিয়াকরণে বিভক্ত হওয়া উচিত এবং নিয়মিতভাবে সারিটি পোল হয়েছে কিনা তা নিশ্চিত হওয়া উচিত।
GetMessage
(বা পছন্দ করুন) এবং DispatchMessage
।
IsHungAppWindow
সঠিকভাবে নোটগুলি উল্লেখ করে যে সূচনা পর্বে কোনও প্রোগ্রামকে কল করতে হবে না GetMessage
।
GetMessage
? এই বৈশিষ্ট্যটি সহজ কমান্ড লাইন অ্যাপ্লিকেশনগুলিকে হ্যাং বিবেচনা না করেই কাজ করতে দেয় কারণ তাদের সারিটি পোল করার দরকার নেই।
উইন্ডোজে উত্স কোড ব্যতীত আমরা অভ্যন্তরীণভাবে এটি কী করছে তা নিশ্চিত হতে পারি না।
একটি SDK উইন্ডোজ ফাংশন রয়েছে IsHungAppWindow
যা ব্যবহার করা যেতে পারে।
কোনও অ্যাপ্লিকেশন যদি ইনপুটটির জন্য অপেক্ষা না করে, প্রারম্ভিক প্রক্রিয়াজাতকরণে না থাকে এবং এটি 5 সেকেন্ডের অভ্যন্তরীণ সময়সীমার মধ্যে পিকমেসেজকে কল করে না তবে এটি প্রতিক্রিয়া না করে বলে বিবেচিত হয় ।
উত্স ইসহংএপ উইন্ডো ফাংশন
যদি কোনও উচ্চ-স্তরের উইন্ডো বার্তাগুলিতে বেশ কয়েক সেকেন্ডের বেশি সময় ধরে সাড়া দেওয়া বন্ধ করে দেয় তবে সিস্টেমটি উইন্ডোটিকে সাড়া না দেয়াকে বিবেচনা করে। এই ক্ষেত্রে, সিস্টেমটি উইন্ডোটি আড়াল করে এবং এটি একটি ভূত উইন্ডোতে প্রতিস্থাপিত করে যার একই জেড ক্রম, অবস্থান, আকার এবং ভিজ্যুয়াল বৈশিষ্ট্য রয়েছে। এটি ব্যবহারকারীকে এটিকে সরাতে, পুনরায় আকার দিতে বা অ্যাপ্লিকেশনটি বন্ধ করতে দেয় allows যাইহোক, এগুলি কেবলমাত্র উপলব্ধ ক্রিয়া কারণ অ্যাপ্লিকেশনটি আসলে প্রতিক্রিয়া জানায় না।
বার্তাগুলি এবং বার্তার সারি সম্পর্কে উত্স
না। অ্যাপ্লিকেশনগুলি পোল করা হয় না তবে প্রসেসরের সময় দেওয়া হয়।
উইন্ডোজের একটি শিডিং সিস্টেম রয়েছে যা প্রসেসরের অ্যাপ্লিকেশন থ্রেডগুলিকে সময় দেয়।
সময়সূচী অ্যালগরিদম জটিল, এবং সম্পূর্ণরূপে উইন্ডোজ ইন্টারনাল, পার্ট 1 (6th ষ্ঠ সংস্করণ) (বিকাশকারী রেফারেন্স) এ বর্ণিত হয়েছে ।
PeekMessage
। সুতরাং যখন উইন্ডোজ অ্যাপ্লিকেশনটিতে কোনও বার্তা প্রেরণ করে এবং পাঁচ সেকেন্ডের মধ্যে সিগন্যাল পায় না, এটি অ্যাপ্লিকেশনটিকে কোনও প্রতিক্রিয়া না জানিয়ে চিহ্নিত করে। এবং প্রকৃতপক্ষে, আরও সাম্প্রতিক উইন্ডোজগুলিতে, উইন্ডোটি শুধুমাত্র "প্রতিক্রিয়া জানায় না" হিসাবে চিহ্নিত হয়েছে যদি এটি সময়মত ব্যবহারকারী ইনপুটটিতে প্রতিক্রিয়া জানাতে ব্যর্থ হয় - যতক্ষণ না আমি কোনও কী বা অন্য কোনও কি ক্লিক বা ক্লিক করার চেষ্টা না করি, অ্যাপ্লিকেশনটি সহজেই "স্তব্ধ" থাকতে পারে প্রতিক্রিয়াশীল "উপস্থিত" ছাড়াই মিনিট।
আসলে, উইন্ডোজ সর্বদা জানে না যে কোনও অ্যাপ্লিকেশন সাড়া দিচ্ছে না। অ্যাপ্লিকেশনটি একটি উইন্ডো সহ একটি ইন্টারেক্টিভ অ্যাপ্লিকেশন হতে হবে, এবং উইন্ডো অবশ্যই অ্যাপ্লিকেশনটিতে সাড়া দিতে ব্যর্থ হয়েছে যে অ্যাপ্লিকেশনটি প্রক্রিয়া করতে ব্যর্থ হয়েছে, উইন্ডোজ সিদ্ধান্ত নেওয়ার আগে যে অ্যাপ্লিকেশন সাড়া দিচ্ছে না।
উদাহরণস্বরূপ, উইন্ডোজ জানার কোনও উপায় নেই যে কমান্ড লাইন থেকে চালিত কোনও ব্যবহারকারী ইন্টারফেস সহ একটি নম্বর-ক্রাঞ্চিং অ্যাপ্লিকেশনটি এটি করছে বা সম্ভবত অসীম লুপে আটকে আছে কিনা knowing
উইন্ডোজের ইন্টারেক্টিভ গ্রাফিকাল অ্যাপ্লিকেশনগুলি একটি বার্তা কাতারে নিয়মিত পোলিং করে ইভেন্টগুলি গ্রহণ করে। উইন্ডোজ কীবোর্ড, মাউস, টাইমার ইত্যাদি ইভেন্টের সাহায্যে এই বার্তাটিকে সজ্জিত করে। যদি কোনও অ্যাপ্লিকেশন কিছু সময়ের জন্য বার্তা সারিটি পোল করতে ব্যর্থ হয় (5 সেকেন্ডটি ইসহংএপ উইন্ডো () ফাংশন ডকুমেন্টেশনে উল্লিখিত সময়সীমা হ'ল), উইন্ডোজ অ্যাপ্লিকেশনটিকে "স্তব্ধ" হিসাবে বিবেচনা করে, যা উইন্ডোটির শিরোনাম পরিবর্তন করে এটি নির্দেশ করতে পারে (পাঠ্য যোগ করে " (প্রতিক্রিয়া নয়) "বা স্থানীয় সংস্করণগুলিতে সমমানের পাঠ্য) এবং যদি ব্যবহারকারী উইন্ডোটির সাথে ইন্টারঅ্যাক্ট করার চেষ্টা করে তবে উইন্ডোটির বিষয়বস্তুগুলি ছড়িয়ে দেওয়া।
অ্যাপ্লিকেশনগুলি এমনভাবে ঝুলতে পারে যাতে উইন্ডোজ স্বীকৃতি দেয় না। উদাহরণস্বরূপ, কোনও অ্যাপ্লিকেশন তার বার্তা কাতারে সঠিকভাবে অভিনয় না করে বার্তাগুলির জন্য পোলিং চালিয়ে যেতে পারে, সুতরাং সমস্ত ব্যবহারিক অভিপ্রায় এবং উদ্দেশ্যে এটি উইন্ডোজকে স্বীকৃতি না দিয়ে "হ্যাং" প্রদর্শিত হবে যে এটি প্রতিক্রিয়াযুক্ত নয়।
উইন্ডোজ একটি অপারেটিং সিস্টেম, এটি চলমান সমস্ত প্রোগ্রামের তদারকি করে।
উইন্ডোজ ইভেন্টগুলি ব্যবহার করে উইন্ডো ভিত্তিক অ্যাপ্লিকেশনগুলির সাথে যোগাযোগ করে। প্রতিটি প্রোগ্রামের একটি থ্রেড থাকে যা নিয়মিত আগত ইভেন্টগুলির জন্য শোনায় এবং সেগুলি প্রক্রিয়া করে। উদাহরণস্বরূপ, আপনি যখন একটি বোতাম বা কোনও বিজ্ঞপ্তি অঞ্চল আইকনটি ক্লিক করেন, উইন্ডোজ কোনও ইভেন্ট উত্পন্ন করে এবং এটিকে যথাযথ প্রক্রিয়াতে ফিড করে। প্রক্রিয়াটি তারপরে কীভাবে এটি পরিচালনা করবেন তা সিদ্ধান্ত নিতে পারে।
প্রোগ্রামগুলির সাথে সমস্ত আলাপচারিতা উইন্ডোজে ইভেন্ট-ভিত্তিক হয়, সুতরাং যখন প্রোগ্রাম খুব দীর্ঘ সময়ের জন্য আগত ইভেন্টগুলি প্রক্রিয়া করে না, তার অর্থ এটি প্রতিক্রিয়া দেয় না। @ ডেভিডপস্টিল তার উত্তরে যেমন খুঁজে পেয়েছেন এবং উল্লেখ করেছেন , সময়সীমাটি 5 সেকেন্ড। PeekMessage
ইভেন্ট সারি থেকে একটি ইভেন্ট পায় এমন ফাংশন।
আপনার প্রশ্নের উত্তর হ্যাঁ / না হয়।
উইন্ডোজ ওএস উইন্ডোজ মেসেজিং ক্যুতে ইভেন্টগুলির সাথে জরিপ অ্যাপ্লিকেশনগুলি করতে এবং করতে পারে, উইন্ডোজ ক্যুতে হ্যান্ডেল / উত্তর দেওয়ার জন্য প্রোগ্রামগুলি একেবারে শূন্য বাধ্যবাধকতার অধীনে। এমনকি কাতারে একটি বার্তার উত্তর দেওয়া উইন্ডোজকে জানায় না যে প্রোগ্রামটি "লকআপ" আছে কিনা। এটি একটি সূচক, তবে এটি সবই। আসল উত্তরটি কিছুটা জটিল is
আসল উত্তর
লোকেরা এখানে আসল উত্তরের আশপাশে হেজড করছে। কোনও প্রোগ্রাম "প্রতিক্রিয়া ব্যক্ত করছে না" তা নির্ধারণ করা " থামানো সমস্যা " এর একটি বৈকল্পিক , যা কম্পিউটার বিজ্ঞানের ক্ষেত্রে আনুষ্ঠানিকভাবে অনির্বাচিত। সংক্ষিপ্ত ব্যাখ্যাটি হ'ল প্রসেসর তৃতীয় পক্ষ হিসাবে নিজেকে পর্যবেক্ষণ করতে পারে না যে সাব্রোটিন একটি অসীম লুপে আটকে আছে কিনা তা নির্ধারণ করতে, কোনও কাউন্টার বাড়ানো বনাম যা কিছু নির্দিষ্ট, সাধারণ সংখ্যায় শেষ হবে। এই দুটিই শক্তভাবে বন্ধ লুপ হিসাবে বিবেচনা করা যেতে পারে। একটি থামল, অন্যটি কখনই শেষ হবে না। এমনকি আপনি, একজন ব্যক্তি হিসাবেও জানেন না যে কোনও প্রোগ্রাম আসলে প্রতিক্রিয়া করছে কি না, বিশেষত যদি এটি একটি শক্তভাবে বন্ধ লুপে থাকে - আপনি কেবল জানেন যে এটি করা উচিত কিনা (প্রতিক্রিয়া)।
উইন্ডোজের দৃষ্টিকোণ থেকে, এই দুটি লুপই "প্রতিক্রিয়া দেখায় না" । এজন্য উইন্ডোজ আপনাকে অপেক্ষা বা সমাপ্তির পছন্দ দেয়, কারণ এটি বলতে পারে না।
সুতরাং সম্পুরক "কেন উইন্ডোজ জানে যে একটি প্রক্রিয়া হয় সাড়া?" উত্তর বরং চতুর। যখন কোনও প্রক্রিয়াটি বহু-থ্রেডেড এবং মাল্টি-প্রসেস ওএস-এ সংকলিত হয়, কখনও কখনও শক্তভাবে বন্ধ লুপগুলিতেও সংকলকটি একটি ফলন () কমান্ড যোগ করতে পারে , যা প্রসেসরের জন্য একটি সুবিধাজনক বিজ্ঞপ্তি সরবরাহ করে যা এটি অন্যান্য চলমান প্রক্রিয়াগুলিতে স্যুইচ করতে পারে provides । এটি হবে "মানেনা" প্রসেসর এবং একটি "প্রসঙ্গ সুইচ" (যেমন বলা হয়) ঘটে যা OS পারবেন (উইন্ডোজ অন্তর্ভুক্ত) স্ট্যাকের মধ্যে অন্যান্য ঘটনা, এর মধ্যে কয়েকটি ট্র্যাকিং অন্তর্ভুক্ত যে প্রক্রিয়া উত্তর দিতে হয়েছে প্রতিক্রিয়া।
** এর অর্থ এই নয় যে একটি প্রতিক্রিয়াশীল প্রক্রিয়া শেষ হবে । ** অসীম লুপের অভ্যন্তরীণ একটি প্রক্রিয়া প্রসেসরের উত্পাদন করতে পারে, উইন্ডোজকে অন্যান্য ইভেন্টগুলি প্রক্রিয়া করতে দেয়।
কিছু উইন্ডোজ প্রোগ্রামগুলিতে, প্রোগ্রামটি উইন্ডোজ ওএস সংকেতগুলি পরিচালনা করবে, যা ওএসকে এটি "প্রতিক্রিয়াশীল" বলে দিতে পারে, তবে কোনও প্রোগ্রাম এটি করার কোনও বাধ্যবাধকতায় নেই is আপনি উইন্ডোজের উচ্চতর স্তরের ভাষার মধ্যে যেমন পার্ল, পিএইচপি, পাইথন, এবং উইন্ডোজ সনাক্ত করতে পারে যে এটি সমাপ্ত হচ্ছে না এবং কোন প্রতিক্রিয়া করছে না, আপনি বেশ সহজ সিপিইউ হগিং, নন-টার্মিনেটিং প্রোগ্রাম লিখতে পারেন। এই মুহুর্তে, উইন্ডোজ হিউরিস্টিক্সের উপর নির্ভর করে - সিপিইউ লোড, মেমরি, প্রোগ্রামটি "অনুমান" করতে চলাকালীন প্রসেসরটি কতগুলি বাধা দেয়। আবার, এই মুহুর্তে, উইন্ডোজ আপনাকে অবসান করতে বলতে হবে, কারণ এটি সত্যই জানে না এটি করা উচিত কিনা।
ভিক্টরের (সঠিক) উত্তরও দেখুন। "সাড়া না দিয়ে" অসীম লুপের মতো নয় কিনা সে সম্পর্কে মন্তব্যগুলি উপেক্ষা করুন। উইন্ডোজ বার্তার সারিটি না জানিয়ে কোনও অ্যাপ্লিকেশন হ্যান্ডেল করতে পারে বা না পারে এমন সমস্ত বার্তা, বাধা, লুপ রয়েছে। বার্তা সারিটি হ্যান্ডলিং হ'ল এমন অনেক ধরণের ইভেন্টের মধ্যে একটি যা কোনও প্রক্রিয়াটি স্থগিত রয়েছে কিনা অনুমান করার চেষ্টা করার জন্য ওএস কাউন্টারগুলিকে রাখে ।