2013-04-15 15 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文件在啓動exe退出時存在。您可以使用CreateProcess()啓動exe,然後使用WaitForSingleObject()或相關函數來檢測該exe何時退出。然後你可以根據需要使用它創建的文件。

+2

非常好,避免輪詢和睡眠的解決方案! –

+0

@ikathegreat - 你如何啓動可執行文件? ShellExecute的? CreateProcess的? – Vector

+0

如果使用'ShellExecuteEx()',確保指定了'SEE_MASK_NOCLOSEPROCESS'標誌,這樣你就可以返回一個進程'HANDLE'來等待。 'CreateProcess()'總是返回這樣的'HANDLE'。 –

1

在計時器中使用函數「filexists」,該計時器在開始後每秒檢查一次。

的另一種方法是使用

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

但我真的不喜歡它,因爲它鎖定了您的應用程序。

相關問題