වැඩසටහනක් ප්‍රතිචාර නොදක්වන්නේ දැයි වින්ඩෝස් දැන ගන්නේ කෙසේද?


173

වැඩසටහනක් ප්‍රතිචාර නොදක්වන්නේ දැයි වින්ඩෝස් දැන ගන්නේ කෙසේද? ක්‍රියාත්මක වන සියලුම යෙදුම් නිරන්තරයෙන් ඡන්දය ප්‍රකාශ කරයිද?



@ magicandre1981 වැඩසටහනක් සක්‍රියව යමක් කරන්නේ දැයි පරීක්ෂා කිරීමට එම පිටුව එක් ක්‍රමයක් යෝජනා කරයි, නමුත් එය වින්ඩෝස් ඇත්ත වශයෙන්ම භාවිතා කරන ක්‍රමය නොවේ.
කෙවින් පැන්කෝ

වින්ඩෝස් පණිවිඩ පෝලිම් දෙස බලන්න, අපේක්ෂකයෙකු වන්නේ පීක්මෙසේජ් () ශ්‍රිතයයි
ලුසියානෝ

Answers:


150

යෙදුමකට වින්ඩෝස් සපයන පෝලිමකින් සිදුවීම් ලැබේ.

යෙදුම ටික වේලාවක් (තත්පර 5) සිදුවීම් විමසුම සිදු නොකරන්නේ නම්, උදාහරණයක් ලෙස දිගු ගණනය කිරීමක් කරන විට, වින්ඩෝස් යෙදුම එල්ලා ඇති බව උපකල්පනය කර පරිශීලකයා දැනුවත් කරයි.

එය වළක්වා ගැනීම සඳහා යෙදුම් මිල අධික ගණනය කිරීම් සේවක කෙඳි වෙත තල්ලු කළ යුතුය. නැතහොත් සැකසුම් බෙදිය යුතුය.


27
මෙය. උපලේඛනගත කිරීම හෝ පිළිගත් පිළිතුරේ යෝජනා කර ඇති කිසිවක් නැත, ඔබ නිතිපතා අමතන්නේද GetMessage(හෝ ඒ හා සමාන) සහ DispatchMessage.
ඩේමන්

1
IsHungAppWindowආරම්භක අවධියේ වැඩසටහනකට ඇමතිය යුතු නැති බව නිවැරදිව සටහන් කිරීමේදී පිළිගත් පිළිතුර GetMessage.
MSalters

Als සැල්ටර්ස් ආරම්භය පළමු කාලයට පෙර කාලය ලෙස අර්ථ දැක්වීමත් සමඟ GetMessage? එම විශේෂාංගය මඟින් සරල විධාන රේඛා යෙදුම් වලට පෝලිම් ඡන්දය දීමට අවශ්‍ය නොවන බැවින් ඒවා එල්ලී ඇතැයි නොසැලකීමට ක්‍රියා කරයි.
ratchet freak

4
cheratchetfreak: බොහෝ විට පළමු CreateWindow ඇමතුමට පෙර. විධාන රේඛා යෙදුම් සම්පූර්ණයෙන්ම වෙනස් තිරිසනුන් ය; ඒවා ConHost.EXE තුළ ක්‍රියාත්මක වන අතර එය ඔවුන් සඳහා වින්ඩෝස් GUI susbyystem සමඟ අන්තර්ක්‍රියා කරයි.
MSalters

1
වින්ඩෝස් 7 හි (සහ ඊට පෙර) වින්ඩෝස් යම් ආකාරයකින් කවුළුව හැසිරවීමට උත්සාහ කර අසමත් වුවහොත් වින්ඩෝස් මෙය ඉතා ඉක්මනින් දකිනු ඇති බව මට පෙනේ. වැඩසටහනක් උපරිම හෝ චලනය වන පණිවිඩයක් ක්‍රියාවට නංවන්නේ නැත්නම්, වින්ඩෝස් 7 තත්පර 1 ක් හෝ 2 කට පසුව ප්‍රතිචාර නොදැක්වීමට දකුණට පනිනු ඇත ..
ඩේව් කොසිනෝ

78

වැඩසටහනක් ප්‍රතිචාර නොදක්වන්නේ දැයි වින්ඩෝස් දැන ගන්නේ කෙසේද?

වින්ඩෝස් වෙත ප්‍රභව කේතය නොමැතිව එය අභ්‍යන්තරව කරන්නේ කුමක්දැයි අපට සහතික විය නොහැක.

SDK වින්ඩෝස් ශ්‍රිතයක් IsHungAppWindowභාවිතා කළ හැකිය.

යෙදුමක් ආදානය සඳහා බලා නොසිටින්නේ නම්, ආරම්භක සැකසුම් තුළ නොමැති නම් සහ තත්පර 5 ක අභ්‍යන්තර කල් ඉකුත් වීමේ කාලය තුළ පීක් මෙසෙජ් ලෙස නම් කර නොමැති නම් එය ප්‍රතිචාර නොදක්වන බව සැලකේ .

ප්‍රභවය IsHungAppWindow ශ්‍රිතය

ඉහළ මට්ටමේ කවුළුවක් තත්පර කිහිපයකට වඩා පණිවිඩ වලට ප්‍රතිචාර දැක්වීම නැවැත්වුවහොත්, පද්ධතිය කවුළුව ප්‍රතිචාර නොදක්වන බව සලකයි. මෙම අවස්ථාවේදී, පද්ධතිය කවුළුව සඟවා එය එකම Z අනුපිළිවෙල, පිහිටීම, ප්‍රමාණය සහ දෘශ්‍ය ගුණාංග සහිත අවතාර කවුළුවක් මගින් ප්‍රතිස්ථාපනය කරයි. මෙය පරිශීලකයාට එය ගෙනයාමට, ප්‍රමාණය වෙනස් කිරීමට හෝ යෙදුම වසා දැමීමට ඉඩ දෙයි. කෙසේ වෙතත්, යෙදුම සැබවින්ම ප්‍රතිචාර නොදක්වන බැවින් ලබා ගත හැකි එකම ක්‍රියා මේවා වේ.

පණිවිඩ සහ පණිවිඩ පෝලිම් පිළිබඳ මූලාශ්‍රය


ක්‍රියාත්මක වන සියලුම යෙදුම් නිරන්තරයෙන් ඡන්දය ප්‍රකාශ කරයිද?

අයදුම්පත් ඡන්ද විමසීම් නොකරන නමුත් සකසනය සඳහා කාලය ලබා දී ඇත.

වින්ඩෝස් හි උපලේඛන පද්ධතියක් ඇති අතර එමඟින් යෙදුම් නූල් සඳහා ප්‍රොසෙසරයට කාලය ලබා දේ.

උපලේඛනගත කිරීමේ ඇල්ගොරිතම සංකීර්ණ වන අතර එය වින්ඩෝස් අභ්‍යන්තරයේ 1 වන කොටස (6 වන සංස්කරණය) (සංවර්ධක යොමුව) තුළ විස්තර කර ඇත.


2
එල්ලෙන තත්වය CPU මත පදනම් නොවේ. බොහෝ වැඩසටහන් 99.999% ක් සඳහා එම අර්ථයෙන් "එල්ලා" ඇති අතර කිසිවක් නොකරයි.
usr

2
එල්ලා තැබීම CPU මත රඳා පවතින බව මා කීවේ කොහේද?
ඩේවිඩ් පොස්ටිල්

2
rusr පිළිතුරේ පළමු භාගය "එය නිරන්තරයෙන් ක්‍රියාත්මක වන සියලුම යෙදුම් මත ඡන්දය ප්‍රකාශ කරයිද?" දෙවන භාගය පිළිතුරු සපයන්නේ "වැඩසටහනක් ප්‍රතිචාර නොදක්වන්නේ දැයි වින්ඩෝස් දැන ගන්නේ කෙසේද? OP එකෙන් ප්‍රශ්න දෙකක් ඇසීය;)
ඩේවිඩ් පොස්ටිල්

9
එය ඇත්ත වශයෙන්ම ඡන්දය ප්‍රකාශ කිරීමක් නොවේද? මම හිතන්නේ අභ්‍යන්තරය කවුළුව මත රැඳී සිටීමේ හසුරුවකට සමානයි PeekMessage. එබැවින් වින්ඩෝස් යෙදුමට පණිවිඩයක් යවන විට සහ තත්පර පහක් ඇතුළත සං sign ා නොකරන විට, එය යෙදුම ප්‍රතිචාර නොදක්වන බව සලකුණු කරයි. ඇත්ත වශයෙන්ම, වඩාත් මෑත වින්ඩෝස් වල, කවුළුව සලකුණු කර ඇත්තේ නියමිත වේලාවට පරිශීලක ආදානයට ප්‍රතිචාර දැක්වීමට අපොහොසත් වුවහොත් පමණි - මම යතුරක් හෝ යමක් ක්ලික් කිරීමට හෝ එබීමට උත්සාහ කරන තුරු, යෙදුමට පහසුවෙන් "එල්ලී" සිටිය හැකිය ප්‍රතිචාර නොදක්වන “නොපෙනී” විනාඩි.
ලුවාන්

2
"පණිවිඩ සහ පණිවිඩ පෝලිම් ගැන" ඉහත සියල්ල ඔබට මකා දැමිය හැකිය, මන්ද එය පිළිතුරට උදව් නොවන බැවිනි. පණිවිඩයක් පොම්ප කිරීම නවත්වන නිසා යෙදුමක් ප්‍රතිචාර දැක්වීම නැවැත්වූ බව වින්ඩෝස් දනී. පණිවුඩය පොම්ප කිරීම වෙනුවට යෙදුම දැඩි ලෙස ක්‍රියා කරන නමුත් එය ක්‍රියාත්මක විය හැකිය (නමුත් එය දුර්වල ලෙස සැලසුම් කරන ලද වැඩසටහනකි).
ඇන්ඩි

32

යෙදුමක් ප්‍රතිචාර නොදක්වන බව වින්ඩෝස් සැමවිටම නොදනී. යෙදුම කවුළුවක් සමඟ අන්තර්ක්‍රියාකාරී යෙදුමක් විය යුතු අතර, යෙදුම ප්‍රතිචාර නොදක්වන බවට වින්ඩෝස් නිගමනය කිරීමට පෙර, යෙදුම සැකසීමට අසමත් වන පණිවිඩ කවුළුවට ලැබිය යුතුය.

නිදසුනක් ලෙස, විධාන රේඛාවෙන් ක්‍රියාත්මක වන පරිශීලක අතුරුමුහුණතක් නොමැති සංඛ්‍යා බිඳීමේ යෙදුමක් එහි කාර්යය කරන්නේද, නැතිනම් අනන්ත පුඩුවක් තුළ සිරවී තිබේද යන්න දැන ගැනීමට වින්ඩෝස් හට ක්‍රමයක් නොමැත.

වින්ඩෝස් හි අන්තර්ක්‍රියාකාරී චිත්‍රක යෙදුම් වලට පණිවිඩ පෝලිමක් අඛණ්ඩව ඡන්දය දීමෙන් සිදුවීම් ලැබේ. යතුරුපුවරුව, මූසිකය, ටයිමරය වැනි සිදුවීම් සමඟ වින්ඩෝස් මෙම පණිවිඩ පෝලිම් ජනප්‍රිය කරයි. යම් කාලයක් සඳහා පණිවිඩ පෝලිම ඡන්ද විමසීමට යෙදුමක් අපොහොසත් වුවහොත් (තත්පර 5 යනු IsHungAppWindow () ක්‍රියාකාරී ලේඛනයේ සඳහන් කාල සීමාවයි), වින්ඩෝස් යෙදුම "එල්ලා" ලෙස සලකයි, එය කවුළු මාතෘකාව වෙනස් කිරීමෙන් ඇඟවුම් කළ හැකිය (පෙළ එකතු කිරීම " (ප්‍රතිචාර නොදක්වයි) ”හෝ දේශීයකරණය කළ අනුවාදවල සමාන පෙළ) සහ පරිශීලකයා කවුළුව සමඟ අන්තර් ක්‍රියා කිරීමට උත්සාහ කරන්නේ නම් කවුළු අන්තර්ගතය ලබා ගැනීම.

යෙදුම් වින්ඩෝස් හඳුනා නොගන්නා ආකාරවලින් එල්ලිය හැකිය. නිදසුනක් ලෙස, යෙදුමක් එහි පණිවිඩ පෝලිමේ නිසි ලෙස ක්‍රියා නොකර දිගටම ඡන්දය ප්‍රකාශ කළ හැකිය, එබැවින් සියලු ප්‍රායෝගික අභිප්‍රායන් සහ අරමුණු සඳහා එය ප්‍රතිචාර නොදක්වන බව වින්ඩෝස් හඳුනා නොගෙන “එල්ලී” ඇති බව පෙනේ.


8
අර්ථ දැක්වීම අනුව ප්‍රතිචාර නොදැක්වීම යන්නෙන් අදහස් වන්නේ කවුළු පණිවිඩ සැකසීම නොවේ, එබැවින් එය සේවා හෝ කොන්සෝල යෙදුම් සඳහා අදාළ නොවේ, එබැවින් මම කියන්නේ යෙදුමක් ප්‍රතිචාර නොදක්වන්නේ නම් වින්ඩෝස් සැමවිටම දන්නා බවයි. ඔබ මිය ගිය අගුල් අවුල් කරන අතර ප්‍රතිචාර නොදක්වයි.
ඇන්ඩි

ඇත්ත වශයෙන්ම එය වැඩසටහනක් ප්‍රතිචාර නොදක්වන්නේ දැයි දැන ගත හැකිය. "ප්‍රතිචාර නොදැක්වීම" යනු "අනන්ත පුඩුවක් තුළ සිරවී" හා සමාන නොවේ
බ්ලූරාජා - ඩැනී ප්ලග්ගෝෆ්ට්

1
ඇත්ත වශයෙන්ම, යෙදුමකට GetMessage () හරහා පණිවිඩ ලබා ගත හැකි අතර ඒවා සැකසීමට අපොහොසත් වන අතර, එය වින්ඩෝස් විසින් "ප්‍රතිචාර නොදක්වන" ලෙස හඳුනා නොගනු ඇත. ජාල, සේවා, අන්තර්ක්‍රියාකාරී විධාන රේඛාව ආදිය විස්තර කිරීමට “ප්‍රතිචාර නොදැක්වීම” යන යෙදුම බොහෝ විට භාවිතා වේ; AFAIK වාක්‍ය ඛණ්ඩ කවුළු යෙදුම් වලට සීමා කරන විධිමත් අර්ථ දැක්වීමක් නොමැත. අවහිරයක් හෝ අනන්ත පුඩුවක් (හෝ වෙනත් ක්‍රමලේඛන දෝෂයක්) යෙදුමක් ප්‍රතිචාර නොදක්වන තත්වයට පත්විය හැකි නමුත් නැත, හේතුව සහ බලපෑම මම පටලවා නොගත්තෙමි.
වික්ටර් ටෝත්

10

වින්ඩෝස් යනු මෙහෙයුම් පද්ධතියකි, එය ක්‍රියාත්මක වන සියලුම වැඩසටහන් අධීක්ෂණය කරයි.

සිදුවීම් භාවිතා කරමින් වින්ඩෝස් කවුළු මත පදනම් වූ යෙදුම් සමඟ සන්නිවේදනය කරයි. සෑම වැඩසටහනකටම නූල් ඇත, එන සිදුවීම් සඳහා නිරන්තරයෙන් සවන් දී ඒවා ක්‍රියාවට නංවයි. උදාහරණයක් ලෙස ඔබ බොත්තමක් හෝ දැනුම්දීම් ප්‍රදේශ නිරූපකයක් ක්ලික් කළ විට, වින්ඩෝස් සිදුවීමක් ජනනය කර සුදුසු ක්‍රියාවලියකට පෝෂණය කරයි. ක්‍රියාවලියට පසුව එය හැසිරවිය යුතු ආකාරය තීරණය කළ හැකිය.

වැඩසටහන් සමඟ ඇති සියලුම අන්තර්ක්‍රියා වින්ඩෝස් හි සිදුවීම් මත පදනම් වූවකි, එබැවින් වැඩසටහන මඟින් එන සිදුවීම් වැඩි කාලයක් ක්‍රියාවට නංවන විට, එයින් අදහස් වන්නේ එය ප්‍රතිචාර නොදක්වන බවයි. Av ඩේවිඩ් පොස්ටිල් ඔහුගේ පිළිතුරෙන් සොයාගෙන ඇති පරිදි , කල් ඉකුත් වීම තත්පර 5 කි. PeekMessageසිදුවීම් පෝලිමේ සිට සිදුවීමක් ලබා ගන්නා ශ්‍රිතය වේ.


0

ඔබේ ප්‍රශ්නයට පිළිතුර ඔව් / නැත.

වින්ඩෝස් මෙහෙයුම් පද්ධතියට වින්ඩෝස් පණිවුඩකරණ පෝලිමේ සිදුවීම් සමඟ යෙදුම් ඡන්ද විමසීම් කළ හැකි අතර ඒවා කළ හැකි වුවද, වැඩසටහන් WinAPI සමඟ සම්බන්ධ වීමට හෝ වින්ඩෝස් පෝලිම හැසිරවීමට / පිළිතුරු දීමට නියත වශයෙන්ම ශුන්‍ය වගකීමක් ඇත. පෝලිමේ ඇති පණිවිඩයකට පිළිතුරු දීම පවා වැඩසටහන "අගුළු දමා තිබේද" යන්න වින්ඩෝස් වෙත නොකියයි. එය දර්ශකයකි, නමුත් එපමණයි. සැබෑ පිළිතුර තරමක් සංකීර්ණ ය.

නියම පිළිතුර

මිනිසුන් මෙහි සත්‍ය පිළිතුර වටහාගෙන සිටිති. වැඩසටහනක් “ප්‍රතිචාර නොදක්වන්නේද” යන්න තීරණය කිරීම පරිගණක විද්‍යාවේ විධිමත් ලෙස තීරණය කළ නොහැකි “ නතර කිරීමේ ගැටලුවේ ” ප්‍රභේදයකි . කෙටි පැහැදිලි කිරීම නම්, සබ්මැරීනයක් අසීමිත පුඩුවක් තුළ සිරවී තිබේද යන්න තීරණය කිරීම සඳහා ප්‍රොසෙසරයට තෙවන පාර්ශවයක් ලෙස ක්‍රියා කළ නොහැකි අතර, කවුන්ටරයක් ​​වැඩි කිරීමට එරෙහිව කිසිවක් නොකර ස්ථාවර හා සාමාන්‍ය සංඛ්‍යාවෙන් අවසන් වේ. මේ දෙකම තදින් වසා ඇති ලූප ලෙස සැලකිය හැකිය. එකක් නතර වේ, අනෙක කිසි විටෙකත් අවසන් නොවේ. පුද්ගලයෙකු වශයෙන්, වැඩසටහනක් සැබවින්ම ප්‍රතිචාර දක්වන්නේද නැද්ද යන්න ඔබ නොදනී, විශේෂයෙන් එය තදින් වසා ඇති ලූපයක තිබේ නම් - ඔබ දන්නේ එය ප්‍රතිචාර දැක්විය යුතු යැයි සිතන්නේ නම් පමණි (ප්‍රතිචාර දැක්විය යුතුය ).

වින්ඩෝස් දෘෂ්ටි කෝණයෙන් බලන කල, මෙම ලූප දෙකම "ප්‍රතිචාර නොදක්වයි" . කවුළු ඔබට බලා සිටීමට හෝ අවසන් කිරීමට තේරීමක් ලබා දෙන්නේ එබැවිනි.

ඒ නිසා නිගමනයකි "ඇයි කවුළු ක්රියාවලියක් බව දන්නේ ඇත ඇත ප්රතිචාර?" පිළිතුර තරමක් දක්ෂයි. බහු-නූල් සහ බහු-ක්‍රියාදාම මෙහෙයුම් පද්ධතියක ක්‍රියාවලියක් සම්පාදනය කරන විට, සමහර විට තදින් වසා ඇති ලූපවල පවා, සම්පාදකයාට අස්වැන්න () විධානයක් එක් කළ හැකි අතර , එමඟින් ප්‍රොසෙසරයට වෙනත් ධාවන ක්‍රියාවලීන් වෙත මාරු විය හැකි බව පහසු දැනුම් දීමක් සපයයි. . එය ප්‍රොසෙසරය "අත්හරින" අතර "සන්දර්භය ස්විචයක්" (එය හැඳින්වෙන පරිදි) සිදු වන අතර එමඟින් මෙහෙයුම් පද්ධතියට (වින්ඩෝස් ඇතුළත්) තොගයේ ඇති වෙනත් සිදුවීම් වලට පිළිතුරු සැපයීමට ඉඩ සලසයි, සමහර ඒවාට ක්‍රියාවලිය ප්‍රතිචාර දක්වා ඇති බව නිරීක්ෂණය කිරීම ඇතුළත් වේ .

** ප්‍රතිචාර දැක්වීමේ ක්‍රියාවලියක් අවසන් වන බව මින් අදහස් නොවේ . ** අසීමිත පුඩුවක් තුළ ඇති ක්‍රියාවලියක් මඟින් ප්‍රොසෙසරය ලබා ගත හැකි අතර වින්ඩෝස් හට වෙනත් සිදුවීම් සැකසීමට ඉඩ ලබා දේ.

සමහර වින්ඩෝස් වැඩසටහන් වලදී, වැඩසටහන වින්ඩෝස් ඕඑස් සං als ා හසුරුවනු ඇති අතර එමඟින් මෙහෙයුම් පද්ධතියට එය “ප්‍රතිචාර දක්වන” බව පැවසිය හැකිය, නමුත් කිසිදු වැඩසටහනක් එසේ කිරීමට බැඳී නොමැත. වින්ඩෝස් හි පර්ල්, පීඑච්පී, පයිතන්, සහ වින්ඩෝස් වැනි ඉහළ මට්ටමේ භාෂා තුළ පවා ඔබට ඉතා සරල CPU හොගිං, නොනවතින වැඩසටහන් ලිවිය හැකිය. එම අවස්ථාවෙහිදී, වින්ඩෝස් රඳා පවතින්නේ හියුරිස්ටික් මතයි - CPU භාරය, මතකය, වැඩසටහන "අනුමාන කිරීමට" ක්‍රියාත්මක වන විට ප්‍රොසෙසරය හසුරුවන වාර ගණන. නැවතත්, එම අවස්ථාවේදී, වින්ඩෝස් ඔබෙන් ඉල්ලා අස්විය යුතු ය, මන්ද එය කළ යුතු දැයි එය නොදන්නා බැවිනි.

වික්ටර්ගේ (නිවැරදි) පිළිතුරද බලන්න. "ප්‍රතිචාර නොදැක්වීම" අනන්ත පුඩුවක් හා සමාන නොවේද යන්න පිළිබඳ අදහස් නොසලකා හරින්න. වින්ඩෝස් පණිවිඩ පෝලිම දැනුම් නොදී යෙදුමක් හැසිරවිය හැකි හෝ නොකළ හැකි සියලු ආකාරයේ පණිවිඩ, බාධා කිරීම්, ලූප තිබේ. පණිවිඩ පෝලිම හැසිරවීම යනු ක්‍රියාවලියක් එල්ලී ඇත්දැයි අනුමාන කිරීමට මෙහෙයුම් පද්ධතිය විසින් කවුන්ටරයන් තබා ගන්නා බොහෝ සිදුවීම් වලින් එකකි .

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.