Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.187.186] |
|
Сообщ.
#1
,
|
|
|
Как насильственно и сразу завершить выполнение потока? А то если пользователь выходит из программы во время его выполнения, возникают ошибки, free и destroy тоже выдают ошибки, а terminate дожидается окончания выполнения
|
Сообщ.
#2
,
|
|
|
Как это Terminate ожидает окончания выполнения?
Вы, видимо, не правильно описали процедуру Execute Если, например, у Вас используется обращение к основному VCL потоку через метод Synchronize, тогда при обращении к его процедуре надо писать While not Terminated Do Synchronize(@SynchronizeProc) и т.д. Вообщем ошибка Ваша. Как мимнимум нужен код процедуры Execute, чтобы решить проблему, если сами не решите. |
Сообщ.
#3
,
|
|
|
<br>procedure TMyThread.Execute;<br>begin<br>getauthors( );<br>gettitles();<br>geturls();<br>getdates();<br>ThreadTerminated:=true; //здесь я устанавливаю эту переменную, чтобы в основном потоке не запустить поток дважды, если юзер вызовет его когда он еще не завершил работу<br>end;<br> Через Synchronize не стал делать потому что слишком медленно |
Сообщ.
#4
,
|
|
|
procedure TMyThread.Execute;
begin getauthors(); if Terminated then Exit; gettitles(); if Terminated then Exit; geturls(); if Terminated then Exit; getdates(); end; |
Сообщ.
#5
,
|
|
|
Цитата Grisha, 11.03.03, 21:29:00 procedure TMyThread.Execute; begin getauthors(); if Terminated then Exit; .... end; Это если при создании потока указывалось FreeOnTeriminate:=True |