WaitForSingleObject

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

#1
Я ожидаю завершения процесса с помощью WaitForSingleObject, но эта функция намертво вешает программу (она не обрабатывает сообщения). Чего посоветуете?
 
K

Kernel

#2
На PeekMessage рабочий цикл построй и быстренько в нём опрашивай чего хочеш ... хоть тем же Wait'ом с небольшим ТаймАутом (какие нибудь 30мс сообщения потерпят :) )
ЗЫ (Если опрашиваеш уже не Wait'ом - поставь в цикл Sleep для того чтоб вместо процесса не вешался процессор :) )
 
A

AlexGin

#3
А может сделать так:
:)
MSG msg;
int iCode;

do
{
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{ /* Loop of message-processing: */
DispatchMessage(&msg);
}
iCode = ::WaitForSingleObject:):evntReady.m_hObject, 0);
}while(iCode != WAIT_OBJECT_0);
 
K

Kernel

#4
Если сделать так то загрузка процессора резко возрастёт т.к. данный код занимается ожиданием 0мс. а остпльное время работает - надо поставить у Wait'a хоть небольшую задержку :) + Приложение должно уметь выходить из этого цикла не только когда дождалось, но и когда его пытаются закрыть ...
 
P

prosto_lynx

#5
На PeekMessage рабочий цикл построй и быстренько в нём опрашивай чего хочеш ... хоть тем же Wait'ом с небольшим ТаймАутом (какие нибудь 30мс сообщения потерпят :) )
ЗЫ (Если опрашиваеш уже не Wait'ом - поставь в цикл Sleep для того чтоб вместо процесса не вешался процессор :) )
Вот, тоже подобная проблема, только одно "но": "задержка" не должена превышать 5-10 мс. А Sleep, как показывает практика, при задании задержки округляет её в большую сторону до кратной 16мс. (т.е. в моем случае задержка получается 16 мс.!)
 
04.09.2006
2 566
3
#6
Windows не является системой реального времени, так что никто не может гарантировать четкой поддержи указанных временных интервалов
 
04.09.2006
2 566
3
#8
Windows CE является системой "мягкого" реального времени. Десктопные версии - системы с вытесняющей многозадачностью. Про серверные с уверенностью не скажу
 
Статус
Закрыто для дальнейших ответов.