Сейчас на форуме: zds (+4 невидимых)

 eXeL@B —› Программирование —› Ожидание завершения процесса [Delphi -> ASM]
Посл.ответ Сообщение

Ранг: 19.7 (новичок), 14thx
Активность: 0.030
Статус: Участник

Создано: 29 декабря 2013 13:41
· Личное сообщение · #1

В общем, нужно запустить процесс и ожидать его завершения, но при этом нужно делать так, чтобы наша программа не зависала. Вот код, который конечно же не работает :D

Code:
  1. invoke WaitForSingleObject, addr ProcInfo.hProcess, 10
  2. mov dwWait, eax
  3.                         
  4. .WHILE dwWait != WAIT_OBJECT_0
  5.          invoke WaitForSingleObject, addr ProcInfo.hProcess, 10
  6.          mov dwWait, eax
  7.                               
  8.          .WHILE !(bQuit)
  9.                  invoke PeekMessage, addr pMsg, 0, 0, 0, PM_REMOVE
  10.                  .IF eax
  11.                         .IF (pMsg.message == WM_QUIT)
  12.                               mov bQuit, TRUE
  13.                         .ELSE
  14.                               invoke TranslateMessage, addr pMsg
  15.                               invoke DispatchMessage, addr pMsg
  16.                         .ENDIF
  17.                  .ELSE
  18.                         .BREAK
  19.                  .ENDIF
  20.          .ENDW               
  21. .ENDW


цикл никогда не завершается, при закрытии проги процесс зависает. Вот рабочий код на дельфях:

Code:
  1.     while WaitForSingleObject(ProcInfo.hProcess, 10) <> WAIT_OBJECT_0 do
  2.       Application.ProcessMessages;




Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 29 декабря 2013 13:44
· Личное сообщение · #2

Делай все в отдельном потоке и маин тред не будет зависать

| Сообщение посчитали полезным: Phantom007

Ранг: 19.7 (новичок), 14thx
Активность: 0.030
Статус: Участник

Создано: 29 декабря 2013 13:51
· Личное сообщение · #3

TryAga1n
Всё равно нужно ждать, пока завершится тот поток. А у меня с этим проблемы, походу :D WaitForSingleObject не хочет нормально робить Либо я просто не знаю, как правильно заставить его работать.




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 29 декабря 2013 13:58 · Поправил: DillerInc
· Личное сообщение · #4

Дык, зачем addr ProcInfo.hProcess? Там значение нужно, а не указатель.

А вообще, не знаю, что там на дельфях работает, но такая логика явно хромает, т.к. ты один раз в цикле вызовешь WaitForSingleObject, возвратишься через 10 мс и войдёшь в цикл сообщений, из которого выйдешь только, когда треснут по голове, т.е. уже будет не до каких-либо процессов.

-----
the Power of Reversing team


| Сообщение посчитали полезным: Phantom007

Ранг: 19.7 (новичок), 14thx
Активность: 0.030
Статус: Участник

Создано: 29 декабря 2013 14:03
· Личное сообщение · #5

DillerInc
Спасибо большое, как то не подумал) Теперь всё работает


 eXeL@B —› Программирование —› Ожидание завершения процесса [Delphi -> ASM]
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати