2013-04-15 4 views
0

모달 양식을 보여주는 Delphi 응용 프로그램 플러그인이 있습니다. 별도의 양식의 코드에서 다른 exe 파일을 호출하여 일부 파일을 처리 한 다음 닫습니다. 플러그인의 두 번째 부분은 exe에서 생성 된 파일을 조작합니다.파일이 존재할 때까지 기다렸다가 프로그램을 계속 진행하십시오.

내 문제는 프로그램이 외부 파일이 실제로 생성되기 전에 계속된다는 것입니다. Delphi 플러그인을 일시 중지하고 반복하기 전에 FileExists가 true를 반환 할 때까지 기다리는 방법이 있습니까?

의사 코드 :

Launch form (ShowModal) 
Form runs exe, manipulates external files 
Close Form 
Form released 
if ExternalFiles exist, do stuff. 

외부 파일이 내 플러그인 외부에서 조작되고 있기 때문에, 나는 그들이 완성하고 생성 된 때 말할 수 없다.

답변

9

아마도 파일은 실행 된 exe가 종료 될 때까지 존재할 것입니다. CreateProcess()을 사용하여 exe를 실행 한 다음 WaitForSingleObject() 또는 관련 함수를 사용하여 해당 exe가 언제 종료되는지 감지 할 수 있습니다. 그런 다음 필요에 따라 만든 파일을 사용할 수 있습니다.

+2

우수, 폴링 및 수면을 피하는 솔루션! –

+0

@ikathegreat - 어떻게 실행 파일을 시작 하시겠습니까? ShellExecute? CreateProcess? – Vector

+0

'ShellExecuteEx()'를 사용한다면'SEE_MASK_NOCLOSEPROCESS' 플래그가 지정되어 있는지 확인하여 대기 할'HANDLE '프로세스를 되 찾을 수 있습니다. 'CreateProcess()'는 항상'HANDLE'을 반환합니다. –

1

시작 후 매초마다 확인하는 타이머에 "파일 공유자"기능을 사용하십시오.

타 방법은

while not fileexists('c:\temp\somfile.txt') do begin 
    sleep(1000); 
end; 

을 사용하는 것입니다 그러나 그것은 당신의 응용 프로그램을 고정하기 때문에 나는별로 좋아하지 않아요.

관련 문제