每個人都可能知道的代碼運行程序,等待它結束:由我自己的CreateProcess與WaitForSingleObject的性能下降
CreateProcess(...
WaitForSingleObject(Process.hProcess, INFINITE
它被多次使用。但是最近我發現,當它啓動一個帶有多媒體播放的程序時,這個調用的性能比從一般文件管理器(Windows XP)執行的同樣的過程要糟糕得多。這對我的(父母)進程的CPU消耗沒有問題,但在播放片段時會出現意想不到的小停頓。
我做了一點變化是這樣的:
CreateProcess ...
do {
Sleep(100);
Res = WaitForSingleObject(Process.hProcess, 10);
} while (Res == WAIT_TIMEOUT);
它幫助。現在子進程沒有問題地播放片段。 那麼第一個片段出現了什麼問題,並且在某處記錄了它?正如我從測試中看到的,第二個「等待」比第一個更「放鬆」,但第一個至少沒有正式吃掉CPU
您正在觀察錯誤的一面。顯然,如果父母被阻止等待,子進程的性能會更差。 WTF的確如此。 – MSalters
這個答案中的小bug:MsgWaitForMultipleObjects()指向的鏈接實際上指向Sleep()函數的MSDN文檔。有點有趣的方式。 ;-) –