Как узнать закончился ли процесс

Тема в разделе "WASM.WIN32", создана пользователем Eraser, 14 авг 2004.

  1. Eraser

    Eraser New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2004
    Сообщения:
    5
    Адрес:
    Хабаровск
    Как проверить работает ли процесс консольного приложения, или он уже завершился, если у меня есть ProcessID и хандл этого процесса.
     
  2. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    Шрайбер:

    "...Структура DISPATCH_HEADER в начале объекта процесса свидетельствует о том, что этот объект является объектом синхронизации... Объект процесса переходит в сигнальное состояние после того, как процесс завершил свою работу..."





    WaitForSingleObject(hProcess,INFINITE).
     
  3. Eraser

    Eraser New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2004
    Сообщения:
    5
    Адрес:
    Хабаровск
    Чё то не совсем то, на сколько я понял WaitForSingleObject стопорит поток из которого вызвана эта функция до тех пор пока объект (в моём случае это - консольное приложение) не завершит свою работу, а мне всего-то надо функцию на подобие: ProcessIsRunning(ProcessID:lol: WORD):Boolean
     
  4. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine

    Код (Text):
    1. exitcode dd ?
    2. invoke   GetExitCodeProcess,hProcess,addr exitcode
    3. cmp      exitcode,STILL_ACTIVE
    4. jz       running
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Оффтоп, небольшая оптимизация:
    Код (Text):
    1.  
    2. push     eax
    3. invoke   GetExitCodeProcess,hProcess,esp
    4. pop      eax
    5. cmp      eax,STILL_ACTIVE
    6. jz       running
     
  6. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Хороший приёмчик , беру на заметку ;) Довольно часто может пригодиться
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Iczelion, тутор № ..., короче про Процессы :derisive:
     
  8. Eraser

    Eraser New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2004
    Сообщения:
    5
    Адрес:
    Хабаровск
    bogrus

    THX

    Asterix

    THX наткнулся ещё на №21 про пайпы - тоже пригодилось, только в этом случае не отсылается ни CTRL_C_EVENT ни CTRL_C_EVENT. :dntknw:((

    А TerminatePeocess(hProcess) в этом случае нормальный способ выхода из консольной программы или это подобие RESET вместо ShutDown'a :))
     
  9. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Eraser

    на сколько я понял WaitForSingleObject стопорит поток

    Что/кто мешает в качестве второго параметра не указывать INFINITE?
     
  10. Sk. Inc.

    Sk. Inc. New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2002
    Сообщения:
    8
    Адрес:
    Калининград
    Eraser

    q_q

    Цитата из MSDN'а про WaitForSingleObject: If dwMilliseconds is zero, the function tests the object's state and returns immediately.
     
  11. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Sk. Inc.

    Да я собственно и не против.
     
  12. RobinFood

    RobinFood New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2004
    Сообщения:
    45
    Адрес:
    Ukraine
    bogrus



    Как насчет "хитрого" процесса, который делает <font color="blue]ExitProcess(STILL_ACTIVE);</font><!--color-->? ;)

    Все-таки WaitForSingleObject надежнее будет...
     
  13. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Гм.. действительно . Ещё как вариант можна заюзать GetProcessTimes (только на NT)