Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Странное поведение потока [D6, WinXP]


Страницы:   1 2

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 ты получишь только в том случае, если менеджер памяти отдаст кусок памяти, в которм сидел поток, обратно ОСи. Но на таком простом примере - это маловероятно.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо