|
Тема |
Те го те! [re: Ивaнчo] |
|
Автор |
bateAz (непознат
) |
|
Публикувано | 08.08.04 15:11 |
|
|
procedure TMyThread.Execute();
label loop;
begin
repeat
// основна постоянно извиквана процедура
DoOneStep(); // това попълва MianProgress - record от разни работи
// козметики
inc(NumberOfNew);
if NumberOfNew > 25 then
begin
WriteBakProgress(MainProgress);
NumberOfNew := 0;
end;
WriteProgress(MainProgress);
// на практика безкраен цикъл, terminated го вдигам от основния тред при
// натискане на бутон
until terminated;
th_exit := true;
end;
Как го стартирам : от бутон
procedure TMainForm.BBStartClick(Sender: TObject);
begin
FindField(InitialField(), true); // процедура някаква си
MyThread := TMyThread.Create(True); { create suspended – second process does not run yet }
MyThread.Priority := tpLowest; { set the priority to lowest }
MyThread.Resume; { now run the thread }
th_exit := false; // mаска дали е терминирал. Има значение за изхода на приложението.
ShowMainProgress(); // показуха във форма на приложението.
BBStart.Enabled := false;
BBStop.Enabled := true;
end;
procedure TMainForm.BBStopClick(Sender: TObject);
begin
MyThread.Terminate();
repeat
until th_exit;
BBStop.Enabled := false;
BBStart.Enabled := true;
end;
OnTerminate() не се обработва. WaitFor няма никъде в треда. TThread.ReturnValue не го следя и не ми носи информация. Но тредът не ми вдига маската, че е терминирал, т.е. той просто е умрял някак си.
Другото, което не съм ти казал е, че интензивно работя със стрингове. Може там да се получават проблеми с паметта или кой знае какво?
|
| |
|
|
|