Главная страница
    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-1150542953
Андрей из Смоленска
2006-06-17 15:15
2006.07.09
Как выдрать координаты из файла, созданого осциллографом? :)


2-1150722460
XTD
2006-06-19 17:07
2006.07.09
Как подкл. телефонный кабель к компу и принимать звонки(кроме мод


1-1148562932
Silver...
2006-05-25 17:15
2006.07.09
OLEContainer -> PowerPoint + ...??? Команды ???... = Типа Preview


8-1138479991
GLText
2006-01-28 23:26
2006.07.09
Текст в OpenGL


15-1149850578
Александр Иванов
2006-06-09 14:56
2006.07.09
Проблемы с последовательностью событий формы





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