2011-07-21 20 views
8

मैं कुछ काम करने के लिए बाहर निकल रहा हूं और आवश्यकता में से एक है अगर इसे लटका दिया जाता है।
मेरा पहला विचार प्रक्रिया थी। हालांकि, मुझे यकीन नहीं है कि इसका वास्तव में क्या अर्थ है।प्रक्रिया क्या करती है। वास्तव में इसका मतलब है?

क्या यह वही बात है जब Win7 एक अनुप्रयोग के विंडो शीर्षक पर (Not Responding) जोड़ता है? मेरी मशीन पर, यह तब भी होता है जब एमएस वर्ड वास्तव में धीमे रिमोट शेयर से फ़ाइल खोलने का प्रयास करता है।

प्रक्रिया करने के लिए क्या शर्तें हैं। रिस्पॉन्डिंग गलत है?

+1

यह वास्तव में क्या कहते हैं तकनीकी कार्यान्वयन विवरण से: संदेश पाश प्रतिक्रिया नहीं दे रहा है। – sehe

उत्तर

14

हुड के तहत, जब आप Process.Responding संपत्ति की जांच करते हैं, तो विंडोज फ़ंक्शन SendMessageTimeout कहा जाता है।

यह फ़ंक्शन मूल रूप से किसी अन्य प्रक्रिया की मुख्य विंडो पर एक संदेश भेजता है और यह जांचता है कि विंडो 5000 एमएस के टाइमआउट के भीतर संदेश स्वीकार कर रही है (इसलिए कंसोल एप्लिकेशन पर इस संपत्ति को जांचना कोई प्रभाव नहीं पड़ता है)।

आप एक कस्टम टाइमआउट उपयोग करना चाहते हैं तो आप सिर्फ रूप में अच्छी तरह SendMessageTimeout समारोह अपने आप को कॉल कर सकते हैं: यह हमेशा उन गैर-उपयोगकर्ता के अनुकूल संदेश जो वास्तव में आता है से एक रहा है:

[DllImport("user32.dll", CharSet=CharSet.Auto)] 
public static extern IntPtr SendMessageTimeout(
    HandleRef hWnd, 
    int msg, 
    IntPtr wParam, 
    IntPtr lParam, 
    int flags, 
    int timeout, 
    out IntPtr pdwResult); 

const int SMTO_ABORTIFHUNG = 2; 

public bool RespondingWithinMs(Process process, int timeoutMs) 
{ 
    IntPtr ptr2; 
    return SendMessageTimeout(
     new HandleRef(process, process.MainWindowHandle), 
     0, 
     IntPtr.Zero, 
     IntPtr.Zero, 
     SMTO_ABORTIFHUNG, 
     timeoutMs, 
     out ptr2) != IntPtr.Zero; 
} 
+0

[प्रक्रिया। स्रोत स्रोत] (https://referencesource.microsoft.com/#System/services/monitoring/system/diagnosticts/Process.cs,953): नोट वे 5000ms टाइमआउट में स्पष्ट रूप से पास करते हैं। SendMessageTimeout के लिए एक एमएसडीएन पृष्ठ [यहां] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644952 (v = vs.85) .aspx) आपके एमएसडीएन लिंक से अधिक जानकारी है, यह एक यह स्पष्ट करता है कि "यह फ़ंक्शन मानता है कि थ्रेड प्रतिसाद नहीं दे रहा है अगर उसने GetMessage या पांच सेकंड के भीतर एक समान कार्य नहीं कहा है" - मुझे लगता है कि यह केवल 'SMTO_ABORTIFHUNG' ध्वज को प्रभावित करता है, यह एक अलग, हार्ड-कोडित 5 सेकंड है चेक। – Quantic

4

Responding का अर्थ है कि एप्लिकेशन विंडो उपयोगकर्ता को प्रतिसाद दे रही है। प्रक्रिया होनी चाहिए एक MainWindowHandlemsdn से:

सच अगर जुड़े प्रक्रिया का यूजर इंटरफेस प्रणाली का जवाब है; अन्यथा, झूठी।

यदि प्रक्रिया में मेनविंडो हैंडल नहीं है, तो यह संपत्ति सच हो जाती है।

आप आवेदन द्वारा उपयोग किए गए टाइमआउट को संशोधित कर सकते हैं। this की जांच रद्द करें।

3
से http://msdn.microsoft.com/en-us/library/system.diagnostics.process.responding.aspx

एक प्रक्रिया एक यूजर इंटरफेस है, तो

, जवाब संपत्ति संपर्कों यूजर इंटरफेस निर्धारित करने के लिए प्रक्रिया उपयोगकर्ता इनपुट पर प्रतिक्रिया है या नहीं। यदि इंटरफ़ेस तुरंत प्रतिक्रिया नहीं देता है, तो प्रतिसाद देने वाली संपत्ति झूठी होती है। इस प्रॉपर्टी का उपयोग यह निर्धारित करने के लिए करें कि संबंधित प्रक्रिया के इंटरफेस ने जवाब देना बंद कर दिया है या नहीं।

संबंधित मुद्दे