Работая с компонентом WinExec заметил, что, в RunEvent функции Async не выполняется или выполняется некорректно, а т.е пока выполняется процесс запуска программы с помощью WinExec, программа не отвечает, а следовательно находиться в режиме ожидания.
Этот топик читают: Гость
Ответов: 49
Рейтинг: 10
|
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
MireX писал(а): выполняется процесс запуска программыПожалуйста, выражайтесь точнее. Процесс запуска программы может занимать доли секунды, а может - минуты. Работа программы вообще не ограничена по максимуму по очевидным причинам. Так что такое "процесс запуска", работа дочерней программы, или этап загрузки? Неоднократно запускал приложения этим компонентом в асинхронном режиме, родительский процесс ВСЕГДА получал управление обратно, после отработки API. Если API долго не возвращает вам управление, запускайте из отдельного потока ваше дочернее приложение. ------------ Дoбавленo в 13.55: Ах да, схема с примером на базе встроенных в Windows приложений у Вас часом не завалялась, наглядно показывающая MireX писал(а): что, в RunEvent функции Async не выполняется или выполняется некорректно------------ Дoбавленo в 13.57: И уточните версии компонентов, среды конструктора, компилятор, который использовался и ОС, на которой проявляется проблема, права пользователя, под которым производился запуск. |
|||
карма: 1 |
| ||
Голосовали: | MireX |
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
А причем здесь "Ошибки в среде", когда это относится к конкретному пакету и от среды никак не зависит
------------ Дoбавленo в 14.03: Перемещено |
|||
карма: 22 |
|
Ответов: 49
Рейтинг: 10
|
|||
Мда нормального ответа нету, 1nd1g0 - вы сами не можете построить схему из одного компонента ? какой тут пример WinExec и запуск через него сторонеей программы.
1nd1g0 писал(а): И уточните версии компонентов, среды конструктора, компилятор, который использовался и ОС, на которой проявляется проблема, права пользователя, под которым производился запуск.Сборка HiAsm - последняя, компилятор - delphi, Windows 7, запускаеться с правами админа. 1nd1g0 писал(а): Пожалуйста, выражайтесь точнее. Процесс запуска программы может занимать доли секунды, а может - минуты. Работа программы вообще не ограничена по максимуму по очевидным причинам. Так что такое "процесс запуска", работа дочерней программы, или этап загрузки?Какая Вам разница сколько времени запускаеться программа ? В данном случае это не важно, это не вообще так как время запуска варьируеться исходя из многих факторов. Я Вам объесняю что пока дочерняя программа запускаеться или выполняет свои функции - при помощи WinExec, программа с WinExec - не отвечает, а следовательно Async из RunEvent не выполнил свою функцию и немедленно не передал управление основной программе, а дождался выполнения дочерней. Он действовал как действовала бы функция Wait. ------------ Дoбавленo в 14.43: В общем это явно особенность дочерней программы, если кто то захочет увидеть, то, что увидел я скачайте этот http://build.chromium.org/f/chromium/snapshots/Win/87454/mini_installer.exe файл, и запустите с помощью WinExec |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
MireX писал(а): вы сами не можете построить схему из одного компонента ?Пардон, но это Вы не можете доказать наличие ошибки в WinExec. То, что кто-то настолько тормозной, что ставит заморозку на своего родителя, и повышает себе приоритет на время распаковки в память, не делает родителя виноватым. WinExec честно ждёт момента, когда сможет выставить размер окна запускаемой жертвы, а жертва занимает под сотню метров оперативки сперва, дважды распаковываясь и тормозя всю систему, т.ч. окно появляется через пол-года. |
|||
карма: 1 |
|
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
MireX писал(а): Я Вам объесняю что пока дочерняя программа запускаеться или выполняет свои функции - при помощи WinExec, программа с WinExec - не отвечаетТак и должно быть -- пока сторонняя прога не отдаст управления ОС, мы сигнала о запуске не получим. Но если надо срочно вернуть управление своему ПО, до сделать можно так code_24242.txt ------------ Дoбавленo в 15.02: 1nd1g0 писал(а): Пардон, но это Вы не можете доказать наличие ошибки в WinExecРежим WinExec изначально не предполагал создания дополнительного потока для запуска чужого ПО именно в чистом асинхронном режиме, но это не является ошибкой, и никогда ею не было |
|||
карма: 22 |
| ||
файлы: 1 | code_24242.txt [678B] [185] |
Ответов: 3889
Рейтинг: 362
|
|||
карма: 1 |
| ||
файлы: 1 | code_24243.txt [499B] [174] |
Ответов: 49
Рейтинг: 10
|
|||
Душевно благодарю вас за разъяснения. Просто мне не давало покая, ошибка ли компонента это, или дочернего софта.
|
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Я же сказал, почему это происходит. Процесс наш ждёт отмашку от библиотеки, к которой обратился по API, а та, в свою очередь, ждёт окна чтобы передать ему сообщения на предмет желаемого размера.
Ну и кто виноват, что окно не появляется до второго пришествия? Обратите внимание на точку, к которой я подключился для запуска Вашего приложения, поймёте трюк |
|||
карма: 1 |
|
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
1nd1g0 писал(а): Да можно ещё проще!Все правильно, запускаем приложение при помощи передачи команды 'open' запускному модулю Shell32.dll, сами ничего не делая |
|||
карма: 22 |
|
Ответов: 8930
Рейтинг: 823
|
|||
nesco, какие бы программы я ни запускал в этих режимах, результат всегда одинаков, мой вывод -- режимы не отличаются
async.jpg wait.jpg |
|||
карма: 19 |
| ||
файлы: 2 | wait.jpg [18.9KB] [396], async.jpg [17.3KB] [485] |
Ответов: 1841
Рейтинг: 369
|
|||
Леонид, у меня работает как и задумано...
Пример схемы: code_24246.txt ------------ Дoбавленo в 15.26: Win 7 (sp1x32) Delphi 4,7 и FPC. SVN: 244 |
|||
карма: 1 |
| ||
файлы: 1 | code_24246.txt [386B] [167] |
Ответов: 49
Рейтинг: 10
|
|||
Сообщество, очень вам благодарен!
1nd1g0 - твой способ просто нерально гениален, все работает как надо и проще не куда было. |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
карма: 1 |
|
14