Сигналы WaitForSingleObject слишком рано конвертируются в ImageMagick

Я конвертирую 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); }

2

Решение

Глупая ошибка, не связанная с 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 за полезные советы.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]