2012-10-15 16 views
6

इसका उपयोग न करने के विरोध में WaitForSingleObject का उपयोग करने का क्या फायदा है? कोड का पहला ब्लॉक previous answer से है। दूसरा ब्लॉक यह है कि मैं इसे कैसे कर रहा हूं।प्रतीक्षा आईडी की जांच करते समय प्रतीक्षा करें

BOOL IsProcessRunning(DWORD pid) 
{ 
    HANDLE process = OpenProcess(SYNCHRONIZE, FALSE, pid); 
    DWORD ret = WaitForSingleObject(process, 0); 
    CloseHandle(process); 
    return (ret == WAIT_TIMEOUT); 
} 

बनाम

BOOL IsProcessRunning(DWORD pid) 
{ 
    HANDLE process = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid); 
    const bool exists = (process != NULL); 
    CloseHandle(process); 
    return exists; 
} 

यह SYNCHRONIZE का उपयोग कर की तरह लगता है उच्च विशेषाधिकारों की आवश्यकता है और मैं केवल वर्तमान उपयोगकर्ता की पीआईडी ​​जाँच करना चाहते हैं।

+1

आपको कुछ तुलनात्मक कार्य जोड़ने के लिए - आप प्रक्रिया पूर्ण होने की स्थिति निर्धारित करने के लिए 'WaitForSingleObject' के विरुद्ध' GetExitCodeProcess' की तुलना करना चाहेंगे। –

उत्तर

8

जब कोई प्रक्रिया पूरी होती है, तो यह चलती रहती है लेकिन यह अस्तित्व से बाहर नहीं जाती है जब तक कि अंतिम संभाल बंद नहीं हो जाता है। पहला समाधान उन दो राज्यों के बीच अंतर करता है (अभी भी चल रहा है या चल रहा है)। बेशक, जवाब वापस लौटाए जाने तक अप्रचलित हो सकता है।

यदि आपको उस भेद की आवश्यकता नहीं है, तो आपका दृष्टिकोण ठीक है (हालांकि मैं फ़ंक्शन को DoProcessExist जैसा कुछ नाम दूंगा)।

+1

मैं प्रक्रिया आईडी * सैद्धांतिक रूप से * भी शामिल कर सकता हूं। ताकि आम तौर पर इसकी आईडी द्वारा प्रक्रिया को खोलने के लिए यह एक अच्छा विचार नहीं है। एक बार अपने हैंडल को बेहतर खोलें (या इसे सहेजने पर इसे सहेज लें, या किसी तीसरे पक्ष से प्राप्त करें)। – valdo

-1

WaitForSingleObject प्रक्रिया पूर्ण होने/निकालने तक प्रतीक्षा करेगा। केवल तभी यह वापस आ जाएगा।

+3

0. –

+0

@AdrianMcCarthy के समय समाप्ति के साथ नहीं, आप सही हैं - मुझे 0 – user93353

+0

नहीं देखा गया शून्य शून्य समय इंजेनिओसिटी का हिस्सा है (उम्मीद है कि मैंने यह सही लिखा है), यह या तो तुरंत समय समाप्त हो जाएगा (= प्रक्रिया चल रही है) या असफल (= ज़ोंबी प्रक्रिया)। – Damon

1

IsProcessRunning का कार्यान्वयन GetExitCodeProcess Win32 API का भी उपयोग कर सकता है।

+0

क्या होगा यदि कोई प्रक्रिया जानबूझकर 25 9 ('STILL_ACTIVE') को इसके निकास कोड के रूप में लौटाती है? – zett42

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