| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Программа контроля процессов |
| Автор: ЧеловекБорща 29.8.2011, 22:44 |
| Доброго времени суток! Хочу написать программу которая будет запускать программы и управлять ими. Вопрос по второй части, управление. Как "привязать" запущеный exe к себе? т.е. узнавать когда exe зависает, когда он запускается, когда работает. Сейчас я запускаю TThread, передаю ему структуру информации о программе которую надо запускать. Поток запускает и ждёт завершения. В момент запуска потока, становится статус что ПО работает. В момент завершения что "не работает". Ну собственно все вот-так вот. Может можно как-то по другому реализовать? Чтобы было больше информации о работающем процессе.И возможность управления процессом по больше. Интересуют все идеи. |
| Автор: kami 30.8.2011, 00:19 |
имхо, даже нужно. Куча потоков, единственная задача которых - просигнализировать о завершении процесса не есть гуд. Чтобы программа была "правильной", используй что-нибудь типа http://msdn.microsoft.com/en-us/library/ms685061(v=vs.85).aspx. Имхо, самый верный вариант, хоть и не самый легкий (и первая трудность - callback-функция будет работать в незнамо каком потоке). Зато можно назначить интервал (сразу отказавшись от таймера) и по нему выводить нужные параметры процесса пользователю "прямо из" callback-а, в онлайн-режиме. http://msdn.microsoft.com/en-us/library/ms684847(v=vs.85).aspx#process_functions - все, начинающиеся с Get и Query. Выбрать нужные Определи критерий "зависания". То, что визуальное окно не отвечает, еще не значит, что процесс завис. Может, там просто какая-то длительная операция идет. А может, завис только один из потоков процесса, а остальные ведут себя адекватно. Самый наглядный пример - зависание окна проводника. Можно открыть кучу других его окон, но процесс-то останется один - explorer.exe. Добавлено через 2 минуты и 2 секунды Пардон, не все. Только те, где в описании указано " for the specified process" |
| Автор: ЧеловекБорща 30.8.2011, 10:10 |
| старая программа работает вот как: 1. запускается поток с уже преданной ему структурой данных. 2. Поток исходя изданных о новом процессе, запускает его и выполняет WaitForSingleObject Но программу нужно было расширить и добавить функционал остановки/перезапуска/оключениязадчани в указанное время. Что тоже выполняеся по средству WaitForSingleObject Ну и тут начались проблемы и не удобства. Собираюсь переписать ПО, и кординально все изменить. под зависаниями я имел ввиду тот факт, что программа(окног программы не отвечает). Ну это IsHungWindow проверяет. А с консольками, ну там вообще ужос. kami, 1. т.е. мне просто запускать поток, передавать ему информацию, поток запускает программу через CreateProcess и манипулирует RegisterWaitForSingleObject ? После вызова этой функции, код потока шагает дальше и можно обращаться к возвращаемому callback'у или выполнение кода виснет(как в случае с WaitForSingleObject)? |