flint2 писал(а):
Тогда уж надо сделать отдельно doKillProcess и doResetWait без терминации.Редактировалось 2 раз(а), последний 2017-12-14 14:24:19
Ответов: 4631
Рейтинг: 749
|
|||
flint2 писал(а): Тогда уж надо сделать отдельно doKillProcess и doResetWait без терминации.Редактировалось 2 раз(а), последний 2017-12-14 14:24:19 |
|||
карма: 26 |
|
Ответов: 2059
Рейтинг: 132
|
|||
Перенёс Сюда:
Netspirit писал(а): Там ожидание реализовуется WaitForSingleObject() по хендлу запущенного процесса. Для того, чтобы реализовать doResetWait нужно создавать отдельный объект Events и ждать по нему и по хендлу через WaitForMultipleObjects(). А в текущей реализации досточно WaitForSingleObject() с таймшитом в 1 сек поместить в цикл, в котором проверять состояние верхней точки.Уж очень не нравятся циклы для опроса точек, с таймшитом и без. Чем подавать чего-то на верхнюю точку, лучше сразу вызвать метод. Сделал вариант с doKillProcess и doResetWait. http://forum.hiasm.com/getfile/38266 doResetWait работает через BOOL FindCloseChangeNotification - Удаляет сигнализирующий объект. Не нравится. Вообще никак не пойму смысла в прерывании ожидания, раз есть onCreateProcess. Проба
Минуту, сейчас будет окончательный вариант... Вот: http://forum.hiasm.com/getfile/38267 Схема.
Редактировалось 5 раз(а), последний 2017-12-14 16:01:06 |
|||
карма: 6 |
|
Ответов: 5227
Рейтинг: 587
|
|||
Чем дальше в лес, тем толще партизаны
|
|||
карма: 4 |
|
Ответов: 4631
Рейтинг: 749
|
|||
Предлагаю такое изменения компонента WinExec. WinExec mod 1-5.zip
Изменено поведение. Событие onExec происходит СРАЗУ после успешного запуска программы. Затем в режиме RunEvent=Wait метод doExec падает на ожидание завершения программы, после чего выдаётся событие onFinished. Ожидание можно прервать методом doAbortWait. Методы doShellExecute/doRunCpl теперь тоже выдают события onExec/onErrorExeс. Добавлены события: - onFinished - onErrorExeс Добавлен метод: - doAbortWait Косметические изменения: - в панели свойств свойство FileName поставлено первым по списку - поправлено описание к точке ExitCode - в коде метода doRunCpl заменено использование функции WinExec на CreateProcess (как рекомендует Microsoft) Редактировалось 1 раз(а), последний 2017-12-14 16:55:07 |
|||
карма: 26 |
|
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
Netspirit писал(а): Предлагаю такое изменения компонента WinExecЭто тестовое изменение или окончательное для добавления? |
|||
карма: 22 |
|
Ответов: 4631
Рейтинг: 749
|
|||
Старался всё сделать максимально тщательно, так что если не заметно каких-либо косяков - можно выкладывать.
Теоретически, можно добавить получение ProcessID и ожидание завершения по doShellExec. Также хочется добавить какое-то специальное значение параметра WorkingDir, чтобы он вычислялся автоматически из Filename (имитация традиционного запуска из Проводника с рабочим каталогом, равным каталогу запускаемой программы) без необходимости использовать FilePartElm. Но пока нету готовых решений. Редактировалось 2 раз(а), последний 2017-12-14 17:56:50 |
|||
карма: 26 |
|
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
Добавил.
|
|||
карма: 22 |
|
Ответов: 31
Рейтинг: 0
|
|||
Netspirit писал(а): Старался всё сделать максимально тщательно, так что если не заметно каких-либо косяков ...
Спасибо за доработку элемента. Потестил. Совсем другое дело. |
|||
карма: 0 |
|