Показать сообщение отдельно
Старый 09.04.2008, 17:08   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от axaLearner Посмотреть сообщение
Есть следующая задача: DAX управляет работой некой программы через COM объект. В случае когда эта программа закрывается не из DAX, т.е. DAX не знает о том что программа была закрыта, DAX продолжает пытаться дергать методы экземпляра COM и получает ошибку времени выполнения. Задача состоит в том, чтобы каждый раз, перед тем как вызвать метод COM - объекта, проверять, существует ли соответствующий ему процесс.
У вас исходная ситуация и сформулированная постановка задачи совершенно не стыкуются. Точнее, конечно, можно и так делать, но в многозадачных ОС так не принято. В многозадачных ОС принято использовать объекты синхронизации и функции ожидания изменений состояния этих объектов. Чтобы узнать, когда какой-то процесс завершится, получите его handle, создайте отдельный поток и вызовите WaitForSingleObject() с этим handle'ом и временем ожидания WAIT_INFINITE. Когда процесс завершится, функция вернет управление, и этот фоновый поток сможет что-то сделать в связи с тем, что управляемый процесс завершился и на COM-вызовы больше не ответит.

PS. Получить handle процесса (COM-сервера) можно, перебрав запущенные процессы и выбрав нужный по имени - это, конечно, для случая, когда в каждый момент времени может быть запущен один экземпляр соотв. процесса.

Последний раз редактировалось gl00mie; 09.04.2008 в 17:10.
За это сообщение автора поблагодарили: axaLearner (1).