我正在使用ImageMagick将PDF转换为JPG。这个转换需要几百毫秒才能运行,所以我有WaitForSingleItem等待进程句柄。
不幸的是,该过程几乎立即完成,并且转换没有完成(我假设由于句柄被关闭而中断)。我想要同步行为。
我有一个连接到进程的输出管道,我根本没有得到任何输出, 错误或其他方面,因为该过程认为“确定,完成,关闭所有内容并继续前进。”
如果操作不那么密集,一切都按预期工作 - 错误,输出等 - 我认为问题几乎肯定在等待。
有人可以就如何解决此问题提出建议吗?这里有一些适用的代码,可能不是很有用,但它是唯一重要的部分,因为其他一切都运行得很好。
运行代码后,收到消息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 :(得分: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提供的有用提示。