Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.44 MB
Время: 0.005 c
4-85287
Igit
2002-06-20 15:36
2002.08.26
Ипользование потоков


4-85280
heex
2002-06-18 19:07
2002.08.26
УБИТЬ приложение. если это вообще возможно.


4-85291
Twin
2002-06-20 15:55
2002.08.26
hwnd


1-84987
Explorer
2002-08-15 12:41
2002.08.26
Подскажите, где я ошибся?


1-85084
Skfi
2002-08-14 08:06
2002.08.26
Текстовый файл





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский