Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

проблема с потоком TThread в XP   Найти похожие ветки 

 
pound ©   (2005-11-23 22:47) [0]

Имеется проблема с потоком TThread в XP, если я запускаю программу и при запуске активизирую поток, в котором пока ещё ничего не происходит, то программа сильно тормозит, приходится запускать её в режиме совместимости с Win98 (в таком варианте проблем не возникает). Как с этим бороться? На ум пока приходит только активизация потока с первой загрузкой данного потока. Но это ведёт к усложнению алгоритма, а это не желательно.
Активизация потока:
procedure TfmForm1.FormActivate(Sender: TObject);
begin
  SprThr := MyThread.Create(False);
end;
Поток:
type
 MyThread = class(TThread)
 private
   { Private declarations }
 protected
   N: byte; //Счётчик
   procedure Run;
  procedure Execute; override;
 end;
var
 SprThr: MyThread;
Implementation
uses MainForm;
//==================================
begin  //Run
 if fmForm1.BoRun then  //В данной ситуации BoRun := false
   begin
      ……….
      ……….
   end;
end;   //Run
//==================================
procedure MyThread.Execute;
var i: byte;
begin  //MyThread.Execute
 { Place thread code here }
 repeat
   for i := 0 to 7 do
     begin
       N := i;
       Synchronize(Run);
     end;
 until False;
end;   //MyThread.Execute

И ещё один вопрос. Как нормально прекратить работу потока?
procedure TfmForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 SprThr.Suspended := true; //Останавливаю поток
 SprThr.Destroy; //Уничтожаю поток
end;
Как только доходит дело до SprThr.Destroy программа виснет.

Заранее благодарен, Андрей.


 
MBo ©   (2005-11-24 06:47) [1]

Из приведенного кода видно, что практически вся работа доп. потока сводится к вызову  Synchronize(Run), что выполняется в основном потоке - отсюда и тормоза.
Для остановки потока нужно Execute сделать, как полагается -  в виде цикла while not Terminated ...
Если установить у потока FreeOnTerminate, то его разрушение сведется просто к Terminate; Waitfor;


 
sniknik ©   (2005-11-24 07:38) [2]

http://delphimaster.net/view/1-1132773228/


 
MBo ©   (2005-11-24 07:43) [3]

Ага, уже увидел, что это спам ;)


 
sniknik ©   (2005-11-24 07:58) [4]

я тоже вчера не видел... иначе бы писать не стал.



Страницы: 1 вся ветка

Текущий архив: 2005.12.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
14-1133175596
konda
2005-11-28 13:59
2005.12.18
Сервер домена и сервер прокси


14-1133159215
Ega23
2005-11-28 09:26
2005.12.18
С днем рождения! 28 ноября


3-1130898365
antoxa2005
2005-11-02 05:26
2005.12.18
Подскажите, а можно ли изменять схему данных Access из программы


1-1132904035
psa247
2005-11-25 10:33
2005.12.18
Application.Hint


6-1117730133
Дмитрий_05
2005-06-02 20:35
2005.12.18
Свой браузер-чат