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

Вниз

TThread   Найти похожие ветки 

 
Dmitrij_K   (2005-07-06 16:18) [0]

Не работает событие OnTerminate
программа без формы, так что я создал класс

TThreadTerminateClass=class
 procedure ThreadTerminate(Sender: TObject);
end;

var ttc: TThreadTerminateClass;
...
begin
...
 Thread1.OnTerminate := ttc.ThreadTerminate;
...
 Thread1.Teminate;


а ThreadTerminate не срабатывет.


 
Dmitrij_K   (2005-07-06 16:24) [1]

Это еще интереснец чем я думал
в конце execute поставил showmessage и в ThreadTerminate тоже

и заработало
закоментировал строчки и опять не работает

И схожу сума


 
Digitman ©   (2005-07-06 16:31) [2]


> в конце execute поставил showmessage


нельзя этого делать
showmessage() неявно создает форму, форма - это визуальный VCL-объект, обращение к таким объектам в контексте неосновного трэда недопустимо


 
Dmitrij_K   (2005-07-06 16:37) [3]

ну вопрос в другом . Почему onterminate не срабатывает?


 
Юрий Зотов ©   (2005-07-06 16:46) [4]

Похоже, что поток просто не завершается, вот оно и не срабатывает. Код создания и код Execute желательно бы...


 
Digitman ©   (2005-07-06 16:47) [5]

а почему он должен отрабатывать ?

ведь вызов обработчика этого события должен произойти в контексте осн.трэда, когда в нем будет вызван CheckSynchronize()

ты где-то явно или неявно вызываешь эту ф-цию ?
нет, не вызываешь.
ну так а что же тогда ты хочешь ?)


 
Dmitrij_K   (2005-07-06 16:49) [6]


procedure TRARThread.Execute;
begin
 while not Terminated do begin
 end;
//  showmessage("AAAAA");
// сюда точно доходит
end;

constructor TRARThread.Create;
begin
 inherited Create(True);
 FRetKod     := 0;
 FMakeCount  := 0;
 FErrorCount := 0;
 FWaitCount  := 0;
 FBlackList  := TStringList.Create;
 FreeOnTerminate := True;
 if not ReadINI then FRetKod := 1;
end;

...

 Thread1 := TRARThread.Create;
 Thread1.OnTerminate := ttc.ThreadTerminate;
 if Thread1.RetKod<>0 then Thread1.Terminate
                      else TStatus := 0;
 Thread1.Resume;


 
Dmitrij_K   (2005-07-06 16:51) [7]

То есть надо просто вызвать CheckSynchronize в каком-нибудь месте?


 
Digitman ©   (2005-07-06 16:52) [8]


> // сюда точно доходит


случайность .. может и не дойти, если Thread1.Resume - последний оператор программы


 
Digitman ©   (2005-07-06 16:58) [9]


> Dmitrij_K   (06.07.05 16:51) [7]
> То есть надо просто вызвать CheckSynchronize в каком-нибудь
> месте?


не в каком-нибудь, а строго в том, где ты ожидаешь потенциальное возникновение события OnTerminate

и не один раз, а циклически, пока не свершится факт обработки этого события


 
Digitman ©   (2005-07-06 17:03) [10]


> программа без формы


это же не мешает использовать объект Application



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

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

Наверх




Память: 0.46 MB
Время: 0.012 c
14-1120442151
X9
2005-07-04 05:55
2005.07.25
Тринистор или тиристор


1-1120817381
serguncho
2005-07-08 14:09
2005.07.25
Упаковка вложенных папок Zlib


1-1120638752
Demidoff
2005-07-06 12:32
2005.07.25
Переворот из книжной в альбомную?


4-1117287880
zeroo
2005-05-28 17:44
2005.07.25
Как отловить нажатие клавиши TAB


9-1113205711
Slavikk
2005-04-11 11:48
2005.07.25
Как работать с Quark with GLScene using OpenBSP





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