![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странное поведение потока [D6, WinXP]
leonidus © (2012-06-20 23:39:00)Создаю простой поток:
type
Cheking_Thread = class(TThread)
private
{ Private declarations }
Nom:integer;
protected
procedure Execute; override;
public
end;
var
Form1: TForm1;
th:Cheking_Thread;
implementation
{$R *.dfm}
procedure Cheking_Thread.Execute;
begin
Nom:=Nom+1;
end;
Запускаю его предварительно инициализировав переменную Nom
procedure TForm1.Button1Click(Sender: TObject);
begin
th:=Cheking_Thread.Create(true);
th.Nom:=1;
th.FreeOnTerminate:=true;
th.Resume;
end;
Дожидаюсь отработки потока и его по идее самоуничтожения. После чего кликаю:
procedure TForm1.Button2Click(Sender: TObject);
begin
label1.Caption:=inttostr(th.nom);
end;
И к моему удивлению не получаю AV а получаю значение Nom равное 56. Откуда 56?? Почему вопреки заданному th.FreeOnTerminate:=true; поток жив?
Медвежонок Пятачок (2012-06-20 23:45:00) [21]1. поток мертв.
2. 56 из мусора
jack128_ (2012-06-20 23:44:00) [22]
> И к моему удивлению не получаю AV
а с чего ты взял, что ты ОБЯЗАН получить AV ?? Ты МОЖЕШЬ его получить, но это не гарантированно. AV ты получишь только в том случае, если менеджер памяти отдаст кусок памяти, в которм сидел поток, обратно ОСи. Но на таком простом примере - это маловероятно.