2012-11-27 3 views
2

ImageMagick을 사용하여 PDF를 JPG로 변환하고 있습니다. 이 변환에는 몇 백 밀리 초가 걸리기 때문에 WaitForSingleItem 프로세스 핸들을 기다리고 있습니다.WaitForSingleObject 신호가 너무 빨리 나타납니다 ImageMagick convert

불행히도 프로세스가 거의 즉시 완료되고 변환이 완료되지 않습니다. 핸들이 닫히기 때문에 인터럽트가 발생했다고 가정합니다. 나는 동기적인 행동을 원한다.

프로세스에 연결된 출력 파이프가 있는데 "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); } 
+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 명령을 가지고 있지만 그래서 윈도우 않으므로 잘못된 피 묻은 하나를 사용합니다.

cmd을 통해 직접했을 때 예상대로 작동했지만 CreateProcess을 통해 어떤 이유로 인해 convert.exe이 잘못 사용되었습니다. 그 이유는 모르지만 고칠 정도로 쉽습니다. 유용한 힌트를 @jeremy 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.

감사 :

ImageMagick과에서 재미 좀 잽

.

+0

기꺼이 도와 드리겠습니다! – jeremy

+0

더 많은 이유가 절대로 상대 경로에 의존하는 대신 항상 절대 경로를 사용합니다. –

관련 문제