Запуск внешней программы, контроль работает ли еще она через таймер. Не могу понять глюк. - VB
Формулировка задачи:
Грубо: появился некий файл в формате A, надо проконвертировать его в формат Б и отобразить на форме.
Конвертацию осуществляем внешней proga.exe.
Алгоритм:
1) Запускаем proga.exe через Shell (завершения не ждем, т.к. конвертация требует чуть времени, неохота стопорить основной процесс)
2) Там же запускаем таймер.
3) Таймер тупо проверяет запущена ли еще proga.exe
и если НЕТ, то отображает файл, полученный как результат работы proga.exe
В таймере стоял Интервал=100.
И все хорошо и давно это использую, но дернул меня нечистый испытать это на старом слабеньком P-III.
И не сработало, т.е. картинка не отобразилась.
Стал искать причины, вставлять всякие дебаги и т.п..
И кажется мне причина в следующем:
Условие таймера
If IsProgaRun("proga") = False
похоже срабатывает до того
как появился процесс с именем "proga".
Т.е. таймер вышибает еще
А не после того как он
Может ли такое быть?
И если ДА то как лечить?
В-1)) не делать ничего. P-III это редкость, прога от этого не вылетает и в крайнем случае юзер может перещелкнуть записи в ListView и картинка в итоге отобразится.
В-2)) Если поставить Интервал=200 вместо 100, то проблема на P-III решается, но не слишком ли это много, с учетом того что на быстрых компьютерах конвертер частенько работает быстрее со многими файлами (не уверен, но...)
В-3)) Могу конечно сделать что-то типа
Конвертацию осуществляем внешней proga.exe.
Алгоритм:
1) Запускаем proga.exe через Shell (завершения не ждем, т.к. конвертация требует чуть времени, неохота стопорить основной процесс)
2) Там же запускаем таймер.
3) Таймер тупо проверяет запущена ли еще proga.exe
и если НЕТ, то отображает файл, полученный как результат работы proga.exe
В таймере стоял Интервал=100.
И все хорошо и давно это использую, но дернул меня нечистый испытать это на старом слабеньком P-III.
И не сработало, т.е. картинка не отобразилась.
Стал искать причины, вставлять всякие дебаги и т.п..
И кажется мне причина в следующем:
Условие таймера
If IsProgaRun("proga") = False
похоже срабатывает до того
как появился процесс с именем "proga".
Т.е. таймер вышибает еще
до того как появился
процесс, завершение которого он должен контролировать.А не после того как он
уже завершился
.Может ли такое быть?
И если ДА то как лечить?
В-1)) не делать ничего. P-III это редкость, прога от этого не вылетает и в крайнем случае юзер может перещелкнуть записи в ListView и картинка в итоге отобразится.
В-2)) Если поставить Интервал=200 вместо 100, то проблема на P-III решается, но не слишком ли это много, с учетом того что на быстрых компьютерах конвертер частенько работает быстрее со многими файлами (не уверен, но...)
В-3)) Могу конечно сделать что-то типа
Но это потенциальный глюк (гораздо больший), если вдруг proga.exe вообще не запустилась и т.п.
Решение задачи: «Запуск внешней программы, контроль работает ли еще она через таймер. Не могу понять глюк.»
textual
Листинг программы
Or (Timer - ltime > 1)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д