2

ImageMagick を使用して PDF を JPG に変換しています。この変換の実行には数百ミリ秒かかるため、プロセス ハンドルでWaitForSingleItemを待機させています。

残念ながら、プロセスはほとんどすぐに終了し、変換は完了しません (ハンドルが閉じられたために中断されたと思います)。同期動作が必要です。

プロセスに出力パイプが接続されていますが、プロセスが「OK、完了、すべてを閉じて次に進む」と判断するため、エラーなどの出力はまったく得られません。

集中力の低い操作では、エラー、出力など、すべてが期待どおりに機能します。問題はほぼ確実に待っていると思います。

誰かがこれを修正する方法について提案できますか? 適用可能なコードをいくつか示しますが、おそらくあまり役​​に立ちませんが、他のすべてが正常に機能するため、重要な部分はこれだけです。

コードを実行すると、メッセージが表示されます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); }
4

1 に答える 1

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。

于 2012-11-27T02:24:33.073 に答える