Я конвертирую PDF в JPG, используя ImageMagick. Это преобразование занимает пару сотен миллисекунд, поэтому у меня есть 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); }
Глупая ошибка, не связанная с 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 за полезные советы.
Других решений пока нет …