Форум: "WinAPI";
Текущий архив: 2002.08.26;
Скачать: [xml.tar.bz2];
Вниз
PeekMessage & GetMessage Найти похожие ветки
← →
KPV-10k (2002-05-24 21:36) [0]Люди! Есть такая проблема: при запуске моей программы под ядром NT она начинает "пожирать" ресурсы системы... таким образом, что с каждой секундой она на это величину времени увеличивает квант времени выделяемый процессу, таким образом всё это приводит к тому, что остальные процессы не обрабатываются...
Вот ядро моего проекта:
while GetMessage(Msg, HInstance, 0, 0) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
В справке, нашел, что это баг и там есть такой код:
// This PeekMessage loop will NOT let the system go idle.
for( ;; )
{
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
return TRUE;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
BackgroundProcessing();
}
Короче, на Делфи перевел его так:
while true do begin
while PeekMessage(Msg, HInstance, 0, 0, PM_REMOVE) do
begin
if msg.message = WM_QUIT then ExitProcess(ExitCode);
TranslateMessage(msg);
DispatchMessage(msg);
WaitMessage();
end;
//BackgroundProcessing(); <-НО ЭТОЙ Ф-ЦИИ НЕТ!!!
end;
Вот я и спрашиваю: как можно сделать правильный обработчик событий? Чтобы рульно работало...
← →
Ales (2002-06-21 08:35) [1]Не уверен, но вроде так (это для сервиса !!!):
while not Terminated do begin
while PeekMessage
....
end;
ServiceThread.ProcessRequests(True);
end; /// end while true
← →
Юрий Зотов (2002-06-21 13:32) [2]Использую тот же самый цикл с GetMessage(Msg, 0, 0, 0).
Ничего лишнего не жрет. А почему HInstance? Это же хэндл модуля, а не окна. И в PeekMessage то же самое.
← →
Игорь Шевченко (2002-06-21 14:11) [3]В таком виде (GetMessage(Msg, HInstance, 0, 0)), по идее вообще ничего не должно придти, так как сообщений с HWND=HInstance у потока, очевидно, нет).
Странно все это :-)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.08.26;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c