Форум: "Основная";
Текущий архив: 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