![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы с TThread. [D6, WinME]
SergP © (2005-07-03 20:18:00)Провел єксперимент с таким кодом:
...
type
TMyThread = class(TThread)
public
procedure Execute; override;
end;
...
procedure TMyThread.Execute;
var
i:integer;
begin
FreeOnTerminate:=true;
WaitWin.ProgressBar.Max:=200000;
for i:=1 to 200000 do WaitWin.ProgressBar.Position:=i;
end;
...
Появилось несколько вопросов:
1. Когда я мышью держу окно за заголовок несколько секунд, затем отпускаю то за это время по прогресбару видно что поток не выполнялся.
Почему так?
2. Устанавливаю FreeOnTerminate:=true; но почему-то после завершения потока я могу обращаться к свойствам и методам объекта Thread:TMyThread и исключений не возникает. Почему? Ведь он по идее должен уничтожаться.
3. Как правильно прервать работу потока досрочно не проверяя в Execute свойство Terminated?
Eraser (2005-07-03 20:29:00) [1]Вернее никак, если не считать передачи в поток переменной, где указывается, что он может завершиться, т.е. например terminated.
Eraser (2005-07-03 20:28:00) [2]SergP © (03.07.05 20:26) [3]
Корректно - никак, не корректно - TerminateThread.
SergP (2005-07-03 20:26:00) [3]
> [2] Eraser © (03.07.05 20:23)
> SergP © (03.07.05 20:18)
>
> Что значит "досрочно"?
Ну может неправильно выразился. Имеется ввиду Прервать работу моего потока из основного потока.
Eraser (2005-07-03 20:23:00) [4]SergP © (03.07.05 20:18)
К визуальным компонентам VCL можно обращаться только из основного потока или использовать метод Synchronize (см. справку).
Как правильно прервать работу потока досрочно не проверяя в Execute свойство Terminated?
Если правильно, то никак.
Eraser (2005-07-03 20:23:00) [5]SergP © (03.07.05 20:18)
Что значит "досрочно"?