2012-11-27 32 views
2

我正在使用ImageMagick將PDF轉換爲JPG。這個轉換需要幾百毫秒才能運行,所以我有一個WaitForSingleItem等待進程句柄。WaitForSingleObject信號太快ImageMagick轉換

不幸的是,該過程幾乎立即完成,並且轉換沒有完成(我假設它由於句柄被關閉而中斷)。我想要同步行爲。

我有一個輸出管道連接到進程,我根本沒有得到任何輸出, 錯誤或其他,因爲進程認爲「確定,完成,關閉所有東西,繼續前進」。

由於操作不太密集,一切都按預期工作 - 錯誤,輸出等 - 我認爲問題幾乎肯定在等待中。

有人可以提出一個建議如何解決這個問題嗎?這裏有一些適用的代碼,可能不是很有幫助,但它是唯一重要的部分,因爲一切正常。

我運行代碼後,收到消息WAIT_OBJECT_0

if (!CreateProcess(
    NULL, 
    (LPSTR) "convert test.pdf test.jpg", 
    NULL, 
    NULL, 
    TRUE, 
    CREATE_NO_WINDOW, 
    NULL, 
    NULL, 
    &si, 
    &pi 
    )) { console_->AddItem("ERROR: Failed to create process."); } 

DWORD wait = WaitForSingleObject(pi.hProcess, INFINITE); 
if (wait == WAIT_ABANDONED)  { MessageBox(NULL, "WAIT_ABANDONED", "Alert", MB_OK); } 
else if (wait == WAIT_OBJECT_0) { MessageBox(NULL, "WAIT_OBJECT_0", "Alert", MB_OK); } 
else if (wait == WAIT_TIMEOUT) { MessageBox(NULL, "WAIT_TIMEOUT", "Alert", MB_OK); } 
else if (wait == WAIT_FAILED) { MessageBox(NULL, "WAIT_FAILED", "Alert", MB_OK); } 
else       { MessageBox(NULL, "END OF THE WORLD", "Alert", MB_OK); } 
+0

您是否肯定需要花費更長時間「更密集」的命令才能正常工作並且不會出錯? – jeremy

+0

是的,我已經在'cmd'中單獨測試過了,而且現在我已經在不同的語言中使用過這個命令了。另外,我嘗試了其他帶有故意錯誤的「不太密集的」命令,並且他們沒有問題就下了管道。 – Ben

+0

GetExitCodeProcess返回什麼? – jeremy

回答

1

愚蠢的錯誤,與WINAPI無關。一切工作都應該如此。

http://support.cs.nott.ac.uk/help/docs/image/ImageMagick/www/FAQ.html#C19

ImageMagick的具有convert命令但這樣做Windows系統,因此它使用了錯誤的血腥之一。

當我通過cmd直接做到了,它按預期工作,但由於某種原因通過CreateProcess,使用了錯誤的convert.exe。不知道這是爲什麼,但它很容易修復。

從ImageMagick的一個有趣的小戳:The Windows convert.exe program is used to convert a system boot disk from MS-DOS "FAT" format to NTFS format. As such it can only be used one time in the life of a system.

感謝@jeremy爲有用的提示。

+0

很高興能幫到你! – jeremy

+0

所有更多的理由永遠不要依賴相對路徑總是使用絕對路徑。 –