Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
ВнизПроблемы с TThread. Найти похожие ветки
← →
SergP © (2005-07-03 20:18) [0]Провел єксперимент с таким кодом:
...
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:23) [1]SergP © (03.07.05 20:18)
К визуальным компонентам VCL можно обращаться только из основного потока или использовать метод Synchronize (см. справку).
Как правильно прервать работу потока досрочно не проверяя в Execute свойство Terminated?
Если правильно, то никак.
← →
Eraser © (2005-07-03 20:23) [2]SergP © (03.07.05 20:18)
Что значит "досрочно"?
← →
SergP © (2005-07-03 20:26) [3]
> [2] Eraser © (03.07.05 20:23)
> SergP © (03.07.05 20:18)
>
> Что значит "досрочно"?
Ну может неправильно выразился. Имеется ввиду Прервать работу моего потока из основного потока.
← →
Eraser © (2005-07-03 20:28) [4]SergP © (03.07.05 20:26) [3]
Корректно - никак, не корректно - TerminateThread.
← →
Eraser © (2005-07-03 20:29) [5]Вернее никак, если не считать передачи в поток переменной, где указывается, что он может завершиться, т.е. например terminated.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.041 c