Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];

Вниз

Как корректно терминировать нить с GetMessage?   Найти похожие ветки 

 
Aleksandr.   (2006-05-24 18:52) [0]

Нить создается с FreeOnTerminate:=false, Execute у нее такой:

var
 Mesg : TagMSG;
 s    : shortstring;
 P    : PChar;
begin
 repeat
   While GetMessage(Mesg,0,0,0) do begin
     if Mesg.message=WM_SetNUProgress then begin
       P:=PChar(Mesg.wParam);
       S:=StrPas(P);
       StrDispose(P);
       DoLog(s)
     end;
     DispatchMessage(Mesg)
   end
 until Terminated
end;

Эта нить получает текстовые сообщения из других потоков по PostThreadMessage. Первоначально она имела FreeOnTerminate=true, и прекращала работу по LogThread.Terminate, но т.к. D2006 отчет о ликах такие нити фиксирует как утечки памяти, что нервирует, япопытался переделать ее завершение на

LogThread.Terminate;
LogThread.WaitFor;
FreeAndNil(LogThread)

В итоге на WaitFor программа зависает. Попробовал добавить в обработчик еще одно сообщение, по которому нить должна терминироваться, и завершать ее как

PostThreadMessage(LogThread.Handle,um_Terminate,0,0);
LogThread.WaitFor;
 FreeAndNil(LogThread)

но эффект тот же. Как правильно надо сделать?


 
Leonid Troyanovsky ©   (2006-05-24 19:15) [1]


> Aleksandr.   (24.05.06 18:52)  

> но эффект тот же. Как правильно надо сделать?


Написать свой Terminate, который будет

inherited;
PostThreadMessage(threadId, WM_QUIT, 0, 0);

Т.к., он не виртуальный, то для порядка переписать Destroy

Кста Dispath тут лишний.

--
Regards, LVT.


 
Aleksandr.   (2006-05-25 11:30) [2]


> Dispath тут лишний.

В смысле, лишний? То есть его вообще не надо нигде вызывать?


 
evvcom ©   (2006-05-25 12:30) [3]


> Т.к., он не виртуальный, то для порядка переписать Destroy

Да... Terminate зря, конечно, они не сделали виртуальным :(


 
Leonid Troyanovsky ©   (2006-05-25 18:39) [4]


> Aleksandr.   (25.05.06 11:30) [2]

> В смысле, лишний? То есть его вообще не надо нигде вызывать?


В данном случае, когда у потока нет окон,
этот вызов не нужен.

--
Regards, LVT.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.009 c
2-1150997598
Hanzo
2006-06-22 21:33
2006.07.09
Работа с кодировкой S-jis.


2-1150640216
AlexanderMS
2006-06-18 18:16
2006.07.09
Клавиша быстрого доступа в меню (TMainMenu) "&Options"...


15-1149778134
oldman
2006-06-08 18:48
2006.07.09
Люди добрые! Сами мы не местные, моможите, кто чем может...


8-1138644666
Lesar
2006-01-30 21:11
2006.07.09
Переконвертировать JPEG


2-1150966996
Calm
2006-06-22 13:03
2006.07.09
Возможности TWebBrowser, несколько вопросов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский