WaitForInputIdle

Тема в разделе "WASM.WIN32", создана пользователем Fess exe, 5 июн 2005.

  1. q_q

    q_q New Member

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

    Из борландовской справки ...

    Понятно. Цитату из msdn я приводил выше. Полагаю, что borland'овская справка ошибочна.



    Fess exe

    Предполагается, что тот, кто пишет процесс-родитель, не знает ничего о процессе-наследнике.

    :derisive: Так уж и ничего?

    А если наследник общается не через stdin/stdout?
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Fess exe



    Дошло :) Родительский процесс должен иметь какое-то представление о данных, которые выводит дочерний. Помнится, "пайпил" я досовское приложение, которое заканчивало каждый сеанс данных командой похожей на промпт: печатало "XXXis>". Так я просто зацикливал ReadFile и парсил данные пока не получал этот "псевдо-промпт". Вот оно:
    Код (Text):
    1. ReadNxtMsg PROC
    2. LOCAL cursor:DWORD
    3.     mov cursor,0
    4. @@: invoke Sleep,0
    5.     mov eax,OFFSET buffer
    6.     add eax,cursor
    7.     mov edx,buffer_len
    8.     sub edx,cursor
    9.     invoke ReadFile,hRead,eax,edx,OFFSET dAux,0
    10.     test eax,eax
    11.     jz @R
    12.     mov eax,dAux
    13.     add eax,cursor
    14.     mov cursor,eax
    15.     cmp eax,buffer_len - 1
    16.     jge @E
    17.     add eax,OFFSET [buffer - DWORD]
    18.     mov eax,[eax]
    19.     cmp eax,' >si' ; детектим "псевдо-промпт"
    20.     jne @B
    21. @R: ret
    22. @E: ; Тут обрабатывается потеря синхронизации
    23.     jmp @R
    24. ReadNxtMsg ENDP


    q_q

    Да, где-то опечатка.
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Fess exe



    CMD.EXE - консольное приложение. Если запустить консольное приложение из командной строки CMD.EXE, то винда не создаст ещё одну консоль, а реутилизирует консоль CMD.EXE. Посмотрите в MSDN описание функции CreateProcess - там есть один флаг, который отвечает за наследование консоли.
     
  4. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Может отдельные комманды cmd.exe выполнять с перенаправлением в файл. Например заставить выполнить его батник в котором вызовы комманд типа dir > a.txt, будут перемежаться с echo step1. Тогда можно будет контролировать

    этапы выполнения им всех операций.
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Quantum

    Я разбирался как-то с вопросом о чтении/записи в консольные приложения. Меня тоже тогда озаботила проблема зависания основного приложения при ReadFile. Спасла именно PeekNamedPipe.



    ссылка