Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];

Вниз

Проблема с процессами   Найти похожие ветки 

 
Starkom   (2002-09-02 10:52) [0]

Есть основной процесс, который порождает дочерний процесс. Оба процесса активно обмениваются данными. Когда дочерний процесс заканчивается, то он посылает сообщение основному процессу. Сделано это для того, чтобы не дать пользователю закрыть приложение основного процесса в то время, когда запущен дочерний.
Проблема в том, что, если дочерний процесс вызывает ошибку, то он убивается системой и посылки сообщения основному процессу не происходит. В результате основное приложение нельзя закрыть!
Как мне из основного приложения отследить такой случай, когда система убивает дочерний процесс.


 
Виктор Щербаков   (2002-09-02 10:54) [1]

При попытке закрытия основного процесса, проверяй существует ли дочерний...


 
Skier   (2002-09-02 10:54) [2]

>Starkom

> Проблема в том, что, если дочерний процесс вызывает ошибку,
> то он убивается системой и посылки сообщения основному процессу
> не происходит.


А может стоит сделать так чтобы дочерний процесс не вызывал ошибку...Это как-то надёжней :)


 
Starkom   (2002-09-02 10:58) [3]

2 Skier: полностью переписать дочерний процесс нет возможности :((
2 Виталий Щербаков: А как? Процесс запуска дочернего процесса выглядит так - запуск exe-файла с параметром. В зависимости от параметра, порожденное окно может быть каким угодно, то есть FindWindow не подходит.


 
Внук   (2002-09-02 11:09) [4]

Используй CreateProcess и владей им в полной мере :)


 
Starkom   (2002-09-02 11:15) [5]

то есть использовать параметр CreateProcess()"a? -
LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION
у меня такой запуск процесса:
CreateProcess(nil,PChar("lalala.exe "+IntToStr(FormNumber)),nil,nil,false,CREATE_DEFAULT_ERROR_MODE,nil,nil,a,b);
ProcessHandle:=b.dwProcessId;
CloseHandle(b.hThread);
CloseHandle(b.hProcess);
Этот ProcessHandle вроде и есть глобальный идентификатор процесса.
А чем проверять то? Ищу-ищу, не могу найти, как можно использовать этот ProcessHandle.


 
Dimk   (2002-09-02 11:19) [6]

Да, и если вызвать функцию типа WaitOnSingleObject
если процесс завершен - то вернется WAIT_OBJECT_0 - то есть дождались мол :0)


 
Внук   (2002-09-02 11:21) [7]

Не нужно закрывать описатель процесса CloseHandle(b.hProcess); - убрать
Идентификатор процесса в принципе не нужен, наверно.
WaitForSingleObject(b.hProcess,0) вернет WAIT_TIMEOUT, если дочерний процесс не завершен еще


 
Виктор Щербаков   (2002-09-02 11:24) [8]

Можно еще GetExitCodeProcess. И смотреть вернет ли она STILL_ACTIVE.


 
Внук   (2002-09-02 11:24) [9]

Также можно использовать GetExitCodeProcess(b.hProcess,...)
которая вернет STILL_ACTIVE для дочернего процесса, если он еще жив



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
1-35772
Yaro
2002-08-30 09:47
2002.09.12
What is fu...i...n Frame


3-35616
Vlad2
2002-08-23 09:02
2002.09.12
работа с TADOConnection


6-35831
poiuytrewq
2002-06-06 21:24
2002.09.12
how to get all host names in local network


1-35689
Sergey-ZZZ
2002-08-30 12:12
2002.09.12
Компоненты


1-35677
Старик
2002-09-02 11:55
2002.09.12
DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский