Потоки (нитки) Threads |
Вітаю!
Ми самі не місцеві, допоможемо чим можете, люди добрі.
Після клацання на пункті меню створюється тред функцією CreateThread, в ньому запускається процедура, яка виробляє деякі обчислення, і показує віконце з прогрес-баром для відображення перебігу процесу.
procedure TMainForm.Action8Execute (Sender: TObject);
var
x: Cardinal;
pr: Pointer;
begin
pr: = @ TMainForm.anythread;
CreateThread (nil, 0, pr, nil, 0, x);
end;
procedure TMainForm.anythread;
var
i: integer;
count: integer;
begin
FormProgress.Show;
count: = 10000;
FormProgress.ProgressBar1.Max: = count;
for i: = 0 to count do
begin
FormProgress.ProgressBar1.StepIt;
end;
FormProgress.Close;
end;
створення вікна з прогрессбар відбувається на стадії запуску програми.
begin
Application.Initialize;
Application.CreateForm (TMainForm, MainForm);
Application.CreateForm (TFormProgress, FormProgress);
Application.Run;
end.
Проблема наступна:
при закритті головної форми додатка відбувається помилка
Exception EOSError in module _____. Exe at ______
System Error. Code 1400.
Неприпустимий дескриптор вікна.
Якщо те ж саме робити прямо з процедури виклику меню (без тред) - такої помилки не виникає. Тобто після відкриття-закриття вікна з тред вікно змінює дескриптор. Як його зберегти перед викликом тред, щоб потім коректно звільнити?
Відстежувати відповіді на це питання по RSS