Главная страница
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.47 MB
Время: 0.03 c
14-1132365647
4ik
2005-11-19 05:00
2005.12.18
Почитать про ADO


2-1132831664
Officeman
2005-11-24 14:27
2005.12.18
Про Слои - компонентов на форме


2-1133373765
dimka_sh
2005-11-30 21:02
2005.12.18
ADO - ConnectionString


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


14-1130933749
Анонимщики
2005-11-02 15:15
2005.12.18
Чемпионат сайта по шахматам