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 exe. Вы можете использовать CreateProcess() для запуска exe, затем используйте WaitForSingleObject() или связанную функцию, чтобы обнаружить, когда этот exe выйдет. Затем вы можете использовать созданные им файлы по мере необходимости.

+2

Отлично, решение, которое позволяет избежать опроса и сна! –

+0

@ikathegreat - как вы запускаете исполняемый файл? ShellExecute? CreateProcess? – Vector

+0

Если вы используете 'ShellExecuteEx()', убедитесь, что флаг 'SEE_MASK_NOCLOSEPROCESS' указан так, что вы возвращаете процесс' HANDLE' для ожидания. 'CreateProcess()' всегда возвращает такую ​​«РУЧКУ». –

1

использовать функцию «filexists» в таймере, который проверяет каждую секунду после запуска.

другой способ заключается в использовании

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

Но мне не очень нравится, потому что он блокирует приложение.

Смежные вопросы