![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с циклом выборки сообщений
SPeller © (2009-12-21 05:10:00)Всем доброго времени суток!
Задача - при выполнении метода не возвращать управление в основной цикл выборки сообщений, а запустить свой цикл по фильтру пока не придет определенное сообщение. Наподобие того, как работает цикл модальной формы. Только мне нужно выхватывать из цикла не все сообщения, а только одно определенное. Код такой:
const
AM_MARSHAL = WM_USER + 51;
function ...
var
msg: TMsg;
doLoop, retReceived: Boolean;
requestID: Cardinal;
begin
...
doLoop := True;
retReceived := False;
while doLoop do
begin
while
not retReceived and
PeekMessage(msg, 0, AM_MARSHAL, AM_MARSHAL, PM_REMOVE or PM_NOYIELD) do
begin
// условие нормального возврата из цикла
retReceived :=
not proxyApt.ProcessMarshalMsg(msg.wParam, msg.дParam) and
(PAptMarshalData(msg.wParam).ID = marshalData.ID);
end;
doLoop :=
not retReceived and doLoop and
not PeekMessage(msg, 0, WM_QUERYENDSESSION, WM_QUIT, PM_NOREMOVE or PM_NOYIELD);
if doLoop then
doLoop := WaitMessage;
end;
...
end;
Проблема в том, что WaitMessage не ждет новых сообщений и возвращается сразу же, в результате цикл гоняется непрерывно, полностью загружая процессор. Хотя в мсдн написано что она должна возвращаться только тогда, когда приходят новые сообщения, вне зависимости от количества оных в очереди на момент ее вызова. Отладчиком проскакиваю вызов WaitMessage без каких-либо задержек. Что делать, как исправить - не пойму... Подскажите, куда копать?
brother (2009-12-21 05:15:00) [21]> Отладчиком проскакиваю вызов WaitMessage без каких-либо
> задержек
sleep(1) ?