Відповідь на питання № 53750

Потоки (нитки) 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







Схожі статті