কোনও প্রোগ্রাম সাড়া না দিলে উইন্ডোজ কীভাবে জানতে পারে?


174

কোনও প্রোগ্রাম সাড়া না দিলে উইন্ডোজ কীভাবে জানতে পারে? এটি কি ক্রমাগত সমস্ত চলমান অ্যাপ্লিকেশনগুলিকে পোলিং করে রাখে?



@ ম্যাজান্দ্রে ১৯৮১ এই পৃষ্ঠাটি কোনও প্রোগ্রাম সক্রিয়ভাবে কিছু করছে কিনা তা যাচাই করার জন্য একটি উপায় প্রস্তাব করেছে, তবে উইন্ডোজ আসলে যেভাবে ব্যবহার করে তা নয় not
কেভিন প্যাঙ্কো 25'15

উইন্ডোজ বার্তার সারিটি দেখুন, একজন প্রার্থী হলেন পিকমেসেজ () ফাংশন
লুসিয়ানো

উত্তর:


150

একটি অ্যাপ্লিকেশন উইন্ডোজ দ্বারা সরবরাহিত একটি সারি থেকে ইভেন্টগুলি পায়।

যদি অ্যাপ্লিকেশন কিছুক্ষণ (5 সেকেন্ড) জন্য ইভেন্টের প্যাকেজটি পোল না করে, উদাহরণস্বরূপ দীর্ঘ গণনা করার সময়, উইন্ডোজ ধরে নেয় যে অ্যাপ্লিকেশনটি স্তব্ধ হয়ে গেছে এবং ব্যবহারকারীকে সতর্ক করে।

অ্যাপ্লিকেশনগুলির কর্মীদের থ্রেডগুলিতে ব্যয়বহুল গণনা ঠেকানো উচিত বা প্রক্রিয়াকরণে বিভক্ত হওয়া উচিত এবং নিয়মিতভাবে সারিটি পোল হয়েছে কিনা তা নিশ্চিত হওয়া উচিত।


27
এই। সময় নির্ধারণের সাথে যেমন গ্রহণযোগ্য উত্তরে প্রস্তাবিত হিসাবে কিছুই করা হয় না কেবলমাত্র আপনি নিয়মিত কল করেন GetMessage(বা পছন্দ করুন) এবং DispatchMessage
দামন

1
গ্রহণযোগ্য উত্তর, IsHungAppWindowসঠিকভাবে নোটগুলি উল্লেখ করে যে সূচনা পর্বে কোনও প্রোগ্রামকে কল করতে হবে না GetMessage
এমসাল্টারস 25:55

@ এসএমএলটাররা প্রথম বারের মতো সময় হিসাবে সংজ্ঞায়িত হচ্ছে GetMessage? এই বৈশিষ্ট্যটি সহজ কমান্ড লাইন অ্যাপ্লিকেশনগুলিকে হ্যাং বিবেচনা না করেই কাজ করতে দেয় কারণ তাদের সারিটি পোল করার দরকার নেই।
ratchet freak

4
@ratchetfreak: সম্ভবত প্রথম ক্রিয়েট উইন্ডো কল করার আগে। কমান্ড লাইন অ্যাপ্লিকেশনগুলি সম্পূর্ণ ভিন্ন ভিন্ন জন্তু; তারা কনহস্ট.এক্সইএইএস-এর অভ্যন্তরে চলছে এবং এটি তাদের জন্য উইন্ডোজ জিইউআই সসিব সিস্টেমের সাথে যোগাযোগ করে।
এমসাল্টার

1
এছাড়াও, এটি আমার কাছে মনে হয় উইন্ডোজ in (এবং সম্ভবত পূর্ববর্তী) উইন্ডোজটি খুব শীঘ্রই এটি লক্ষ্য করবে যদি আপনি চেষ্টা করেন এবং কোনওভাবে উইন্ডোটি পরিচালনা করতে ব্যর্থ হন। যেমন যদি কোনও প্রোগ্রাম সর্বাধিক বা মেসেজ সরানোর প্রক্রিয়া না করে তবে উইন্ডোজ 7 প্রায় 1 বা 2 সেকেন্ড পরে সাড়া না দেওয়ার জন্য ডানদিকে ঝাঁপিয়ে পড়বে ..
ডেভ কজিনিউ

78

কোনও প্রোগ্রাম সাড়া না দিলে উইন্ডোজ কীভাবে জানতে পারে?

উইন্ডোজে উত্স কোড ব্যতীত আমরা অভ্যন্তরীণভাবে এটি কী করছে তা নিশ্চিত হতে পারি না।

একটি SDK উইন্ডোজ ফাংশন রয়েছে IsHungAppWindowযা ব্যবহার করা যেতে পারে।

কোনও অ্যাপ্লিকেশন যদি ইনপুটটির জন্য অপেক্ষা না করে, প্রারম্ভিক প্রক্রিয়াজাতকরণে না থাকে এবং এটি 5 সেকেন্ডের অভ্যন্তরীণ সময়সীমার মধ্যে পিকমেসেজকে কল করে না তবে এটি প্রতিক্রিয়া না করে বলে বিবেচিত হয়

উত্স ইসহংএপ উইন্ডো ফাংশন

যদি কোনও উচ্চ-স্তরের উইন্ডো বার্তাগুলিতে বেশ কয়েক সেকেন্ডের বেশি সময় ধরে সাড়া দেওয়া বন্ধ করে দেয় তবে সিস্টেমটি উইন্ডোটিকে সাড়া না দেয়াকে বিবেচনা করে। এই ক্ষেত্রে, সিস্টেমটি উইন্ডোটি আড়াল করে এবং এটি একটি ভূত উইন্ডোতে প্রতিস্থাপিত করে যার একই জেড ক্রম, অবস্থান, আকার এবং ভিজ্যুয়াল বৈশিষ্ট্য রয়েছে। এটি ব্যবহারকারীকে এটিকে সরাতে, পুনরায় আকার দিতে বা অ্যাপ্লিকেশনটি বন্ধ করতে দেয় allows যাইহোক, এগুলি কেবলমাত্র উপলব্ধ ক্রিয়া কারণ অ্যাপ্লিকেশনটি আসলে প্রতিক্রিয়া জানায় না।

বার্তাগুলি এবং বার্তার সারি সম্পর্কে উত্স


এটি কি ক্রমাগত সমস্ত চলমান অ্যাপ্লিকেশনগুলিকে পোলিং করে রাখে?

না। অ্যাপ্লিকেশনগুলি পোল করা হয় না তবে প্রসেসরের সময় দেওয়া হয়।

উইন্ডোজের একটি শিডিং সিস্টেম রয়েছে যা প্রসেসরের অ্যাপ্লিকেশন থ্রেডগুলিকে সময় দেয়।

সময়সূচী অ্যালগরিদম জটিল, এবং সম্পূর্ণরূপে উইন্ডোজ ইন্টারনাল, পার্ট 1 (6th ষ্ঠ সংস্করণ) (বিকাশকারী রেফারেন্স) এ বর্ণিত হয়েছে ।


2
হ্যাং স্টেট সিপিইউ-র ভিত্তিতে নয়। বেশিরভাগ প্রোগ্রামগুলি 99.999% সময়ের জন্য সেই অর্থে "স্তব্ধ" থাকে এবং কিছুই করে না।
usr

2
@ উশর আমি কোথায় বলেছি যে "স্তব্ধ" সিপিইউর উপর নির্ভরশীল?
ডেভিডপস্টিল

2
@ ইউএস উত্তরের প্রথম অর্ধে উত্তর দেওয়া হচ্ছে "এটি কি সমস্ত চলমান অ্যাপ্লিকেশনগুলিতে নিয়মিত পোলিং রাখে?" ); দ্বিতীয়ার্ধে "উত্তর দিচ্ছে উইন্ডোজ কীভাবে জানবেন যদি একটি প্রোগ্রাম সাড়া দিচ্ছে না ?. ওপি এক দুটি প্রশ্ন জিজ্ঞাসা করে
DavidPostill

9
এটি আসলে ভোটদান নয়, তবে কি এটি? আমি ধরে নিলাম অভ্যন্তরগুলি আরও বেশি উইন্ডোতে অপেক্ষা করার মতো হ্যান্ডেলটি যখন আপনি কল করেন তখন সিগন্যাল হয় PeekMessage। সুতরাং যখন উইন্ডোজ অ্যাপ্লিকেশনটিতে কোনও বার্তা প্রেরণ করে এবং পাঁচ সেকেন্ডের মধ্যে সিগন্যাল পায় না, এটি অ্যাপ্লিকেশনটিকে কোনও প্রতিক্রিয়া না জানিয়ে চিহ্নিত করে। এবং প্রকৃতপক্ষে, আরও সাম্প্রতিক উইন্ডোজগুলিতে, উইন্ডোটি শুধুমাত্র "প্রতিক্রিয়া জানায় না" হিসাবে চিহ্নিত হয়েছে যদি এটি সময়মত ব্যবহারকারী ইনপুটটিতে প্রতিক্রিয়া জানাতে ব্যর্থ হয় - যতক্ষণ না আমি কোনও কী বা অন্য কোনও কি ক্লিক বা ক্লিক করার চেষ্টা না করি, অ্যাপ্লিকেশনটি সহজেই "স্তব্ধ" থাকতে পারে প্রতিক্রিয়াশীল "উপস্থিত" ছাড়াই মিনিট।
লুয়ান

2
"বার্তাগুলি এবং বার্তাগুলি সম্পর্কে" সম্পর্কে সমস্ত উত্তর আপনি মুছে ফেলতে পারেন কারণ এটি উত্তরটি সহায়তা করে না। উইন্ডোজ জানে যে কোনও অ্যাপ্লিকেশন প্রতিক্রিয়া বন্ধ করেছে কারণ এটি বার্তা পাম্প করা বন্ধ করে দেয়। অ্যাপ্লিকেশনটি চলমান হতে পারে যদিও এটি বার্তা পাম্প করার পরিবর্তে নিবিড় কিছু করছে (তবে এটি একটি খারাপ ডিজাইনের প্রোগ্রামটিকে সমর্থন করে)।
অ্যান্ডি

32

আসলে, উইন্ডোজ সর্বদা জানে না যে কোনও অ্যাপ্লিকেশন সাড়া দিচ্ছে না। অ্যাপ্লিকেশনটি একটি উইন্ডো সহ একটি ইন্টারেক্টিভ অ্যাপ্লিকেশন হতে হবে, এবং উইন্ডো অবশ্যই অ্যাপ্লিকেশনটিতে সাড়া দিতে ব্যর্থ হয়েছে যে অ্যাপ্লিকেশনটি প্রক্রিয়া করতে ব্যর্থ হয়েছে, উইন্ডোজ সিদ্ধান্ত নেওয়ার আগে যে অ্যাপ্লিকেশন সাড়া দিচ্ছে না।

উদাহরণস্বরূপ, উইন্ডোজ জানার কোনও উপায় নেই যে কমান্ড লাইন থেকে চালিত কোনও ব্যবহারকারী ইন্টারফেস সহ একটি নম্বর-ক্রাঞ্চিং অ্যাপ্লিকেশনটি এটি করছে বা সম্ভবত অসীম লুপে আটকে আছে কিনা knowing

উইন্ডোজের ইন্টারেক্টিভ গ্রাফিকাল অ্যাপ্লিকেশনগুলি একটি বার্তা কাতারে নিয়মিত পোলিং করে ইভেন্টগুলি গ্রহণ করে। উইন্ডোজ কীবোর্ড, মাউস, টাইমার ইত্যাদি ইভেন্টের সাহায্যে এই বার্তাটিকে সজ্জিত করে। যদি কোনও অ্যাপ্লিকেশন কিছু সময়ের জন্য বার্তা সারিটি পোল করতে ব্যর্থ হয় (5 সেকেন্ডটি ইসহংএপ উইন্ডো () ফাংশন ডকুমেন্টেশনে উল্লিখিত সময়সীমা হ'ল), উইন্ডোজ অ্যাপ্লিকেশনটিকে "স্তব্ধ" হিসাবে বিবেচনা করে, যা উইন্ডোটির শিরোনাম পরিবর্তন করে এটি নির্দেশ করতে পারে (পাঠ্য যোগ করে " (প্রতিক্রিয়া নয়) "বা স্থানীয় সংস্করণগুলিতে সমমানের পাঠ্য) এবং যদি ব্যবহারকারী উইন্ডোটির সাথে ইন্টারঅ্যাক্ট করার চেষ্টা করে তবে উইন্ডোটির বিষয়বস্তুগুলি ছড়িয়ে দেওয়া।

অ্যাপ্লিকেশনগুলি এমনভাবে ঝুলতে পারে যাতে উইন্ডোজ স্বীকৃতি দেয় না। উদাহরণস্বরূপ, কোনও অ্যাপ্লিকেশন তার বার্তা কাতারে সঠিকভাবে অভিনয় না করে বার্তাগুলির জন্য পোলিং চালিয়ে যেতে পারে, সুতরাং সমস্ত ব্যবহারিক অভিপ্রায় এবং উদ্দেশ্যে এটি উইন্ডোজকে স্বীকৃতি না দিয়ে "হ্যাং" প্রদর্শিত হবে যে এটি প্রতিক্রিয়াযুক্ত নয়।


8
সংজ্ঞা অনুসারে সাড়া না দেওয়ার অর্থ উইন্ডো বার্তাগুলি প্রক্রিয়াকরণ না করা, সুতরাং এটি পরিষেবাগুলিতে বা কনসোল অ্যাপ্লিকেশনগুলিতে প্রযোজ্য না এবং তাই আমি বলতে চাই যে কোনও অ্যাপ্লিকেশন সাড়া দিচ্ছে না তা উইন্ডোজ সর্বদা জানে। আপনি মৃত লক গুলিয়ে ফেলছেন এবং সাড়া দিচ্ছেন না not
অ্যান্ডি

অবশ্যই এটি জানতে পারে কোনও প্রোগ্রাম সাড়া দিচ্ছে না কিনা। "প্রতিক্রিয়া না জানা" "অসীম লুপে আটকে থাকা" সমান নয়
ব্লুরাজা - ড্যানি ফ্লুঘুফুট

1
আসলে, কোনও অ্যাপ্লিকেশন গেটমেসেজ () এর মাধ্যমে বার্তাগুলি পুনরুদ্ধার করতে পারে এবং সেগুলি প্রক্রিয়া করতে ব্যর্থ হতে পারে এবং এটি অবশ্যই তার ব্যবহারকারীর কাছে প্রতিক্রিয়াহীন বলে প্রমাণিত হওয়া সত্ত্বেও এটি উইন্ডোজ দ্বারা "প্রতিক্রিয়া না জানা" হিসাবে স্বীকৃত হবে না। "সাড়া না দেওয়া" শব্দটি প্রায়শই নেটওয়ার্ক, পরিষেবা, ইন্টারেক্টিভ কমান্ড লাইন ইত্যাদি অ্যাপ্লিকেশনগুলি বর্ণনা করতে ব্যবহৃত হয়; এএফআইকে এমন কোনও আনুষ্ঠানিক সংজ্ঞা নেই যা বাক্যটিকে উইন্ডোযুক্ত অ্যাপ্লিকেশনগুলির মধ্যে সীমাবদ্ধ করে। অচলাবস্থা বা একটি অসীম লুপ (বা অন্য কোনও প্রোগ্রামিং ত্রুটি) উভয়ই কোনও অ্যাপ্লিকেশনটিকে অ-প্রতিক্রিয়াশীল হতে পারে, তবে না, আমি কারণ এবং প্রভাবকে বিভ্রান্ত করি নি।
ভিক্টর টথ

10

উইন্ডোজ একটি অপারেটিং সিস্টেম, এটি চলমান সমস্ত প্রোগ্রামের তদারকি করে।

উইন্ডোজ ইভেন্টগুলি ব্যবহার করে উইন্ডো ভিত্তিক অ্যাপ্লিকেশনগুলির সাথে যোগাযোগ করে। প্রতিটি প্রোগ্রামের একটি থ্রেড থাকে যা নিয়মিত আগত ইভেন্টগুলির জন্য শোনায় এবং সেগুলি প্রক্রিয়া করে। উদাহরণস্বরূপ, আপনি যখন একটি বোতাম বা কোনও বিজ্ঞপ্তি অঞ্চল আইকনটি ক্লিক করেন, উইন্ডোজ কোনও ইভেন্ট উত্পন্ন করে এবং এটিকে যথাযথ প্রক্রিয়াতে ফিড করে। প্রক্রিয়াটি তারপরে কীভাবে এটি পরিচালনা করবেন তা সিদ্ধান্ত নিতে পারে।

প্রোগ্রামগুলির সাথে সমস্ত আলাপচারিতা উইন্ডোজে ইভেন্ট-ভিত্তিক হয়, সুতরাং যখন প্রোগ্রাম খুব দীর্ঘ সময়ের জন্য আগত ইভেন্টগুলি প্রক্রিয়া করে না, তার অর্থ এটি প্রতিক্রিয়া দেয় না। @ ডেভিডপস্টিল তার উত্তরে যেমন খুঁজে পেয়েছেন এবং উল্লেখ করেছেন , সময়সীমাটি 5 সেকেন্ড। PeekMessageইভেন্ট সারি থেকে একটি ইভেন্ট পায় এমন ফাংশন।


0

আপনার প্রশ্নের উত্তর হ্যাঁ / না হয়।

উইন্ডোজ ওএস উইন্ডোজ মেসেজিং ক্যুতে ইভেন্টগুলির সাথে জরিপ অ্যাপ্লিকেশনগুলি করতে এবং করতে পারে, উইন্ডোজ ক্যুতে হ্যান্ডেল / উত্তর দেওয়ার জন্য প্রোগ্রামগুলি একেবারে শূন্য বাধ্যবাধকতার অধীনে। এমনকি কাতারে একটি বার্তার উত্তর দেওয়া উইন্ডোজকে জানায় না যে প্রোগ্রামটি "লকআপ" আছে কিনা। এটি একটি সূচক, তবে এটি সবই। আসল উত্তরটি কিছুটা জটিল is

আসল উত্তর

লোকেরা এখানে আসল উত্তরের আশপাশে হেজড করছে। কোনও প্রোগ্রাম "প্রতিক্রিয়া ব্যক্ত করছে না" তা নির্ধারণ করা " থামানো সমস্যা " এর একটি বৈকল্পিক , যা কম্পিউটার বিজ্ঞানের ক্ষেত্রে আনুষ্ঠানিকভাবে অনির্বাচিত। সংক্ষিপ্ত ব্যাখ্যাটি হ'ল প্রসেসর তৃতীয় পক্ষ হিসাবে নিজেকে পর্যবেক্ষণ করতে পারে না যে সাব্রোটিন একটি অসীম লুপে আটকে আছে কিনা তা নির্ধারণ করতে, কোনও কাউন্টার বাড়ানো বনাম যা কিছু নির্দিষ্ট, সাধারণ সংখ্যায় শেষ হবে। এই দুটিই শক্তভাবে বন্ধ লুপ হিসাবে বিবেচনা করা যেতে পারে। একটি থামল, অন্যটি কখনই শেষ হবে না। এমনকি আপনি, একজন ব্যক্তি হিসাবেও জানেন না যে কোনও প্রোগ্রাম আসলে প্রতিক্রিয়া করছে কি না, বিশেষত যদি এটি একটি শক্তভাবে বন্ধ লুপে থাকে - আপনি কেবল জানেন যে এটি করা উচিত কিনা (প্রতিক্রিয়া)।

উইন্ডোজের দৃষ্টিকোণ থেকে, এই দুটি লুপই "প্রতিক্রিয়া দেখায় না" । এজন্য উইন্ডোজ আপনাকে অপেক্ষা বা সমাপ্তির পছন্দ দেয়, কারণ এটি বলতে পারে না।

সুতরাং সম্পুরক "কেন উইন্ডোজ জানে যে একটি প্রক্রিয়া হয় সাড়া?" উত্তর বরং চতুর। যখন কোনও প্রক্রিয়াটি বহু-থ্রেডেড এবং মাল্টি-প্রসেস ওএস-এ সংকলিত হয়, কখনও কখনও শক্তভাবে বন্ধ লুপগুলিতেও সংকলকটি একটি ফলন () কমান্ড যোগ করতে পারে , যা প্রসেসরের জন্য একটি সুবিধাজনক বিজ্ঞপ্তি সরবরাহ করে যা এটি অন্যান্য চলমান প্রক্রিয়াগুলিতে স্যুইচ করতে পারে provides । এটি হবে "মানেনা" প্রসেসর এবং একটি "প্রসঙ্গ সুইচ" (যেমন বলা হয়) ঘটে যা OS পারবেন (উইন্ডোজ অন্তর্ভুক্ত) স্ট্যাকের মধ্যে অন্যান্য ঘটনা, এর মধ্যে কয়েকটি ট্র্যাকিং অন্তর্ভুক্ত যে প্রক্রিয়া উত্তর দিতে হয়েছে প্রতিক্রিয়া।

** এর অর্থ এই নয় যে একটি প্রতিক্রিয়াশীল প্রক্রিয়া শেষ হবে । ** অসীম লুপের অভ্যন্তরীণ একটি প্রক্রিয়া প্রসেসরের উত্পাদন করতে পারে, উইন্ডোজকে অন্যান্য ইভেন্টগুলি প্রক্রিয়া করতে দেয়।

কিছু উইন্ডোজ প্রোগ্রামগুলিতে, প্রোগ্রামটি উইন্ডোজ ওএস সংকেতগুলি পরিচালনা করবে, যা ওএসকে এটি "প্রতিক্রিয়াশীল" বলে দিতে পারে, তবে কোনও প্রোগ্রাম এটি করার কোনও বাধ্যবাধকতায় নেই is আপনি উইন্ডোজের উচ্চতর স্তরের ভাষার মধ্যে যেমন পার্ল, পিএইচপি, পাইথন, এবং উইন্ডোজ সনাক্ত করতে পারে যে এটি সমাপ্ত হচ্ছে না এবং কোন প্রতিক্রিয়া করছে না, আপনি বেশ সহজ সিপিইউ হগিং, নন-টার্মিনেটিং প্রোগ্রাম লিখতে পারেন। এই মুহুর্তে, উইন্ডোজ হিউরিস্টিক্সের উপর নির্ভর করে - সিপিইউ লোড, মেমরি, প্রোগ্রামটি "অনুমান" করতে চলাকালীন প্রসেসরটি কতগুলি বাধা দেয়। আবার, এই মুহুর্তে, উইন্ডোজ আপনাকে অবসান করতে বলতে হবে, কারণ এটি সত্যই জানে না এটি করা উচিত কিনা।

ভিক্টরের (সঠিক) উত্তরও দেখুন। "সাড়া না দিয়ে" অসীম লুপের মতো নয় কিনা সে সম্পর্কে মন্তব্যগুলি উপেক্ষা করুন। উইন্ডোজ বার্তার সারিটি না জানিয়ে কোনও অ্যাপ্লিকেশন হ্যান্ডেল করতে পারে বা না পারে এমন সমস্ত বার্তা, বাধা, লুপ রয়েছে। বার্তা সারিটি হ্যান্ডলিং হ'ল এমন অনেক ধরণের ইভেন্টের মধ্যে একটি যা কোনও প্রক্রিয়াটি স্থগিত রয়েছে কিনা অনুমান করার চেষ্টা করার জন্য ওএস কাউন্টারগুলিকে রাখে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.