Главная страница
    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.015 c
14-1132921585
Pave/\
2005-11-25 15:26
2005.12.18
VMWare workstation. Проблема с сетью


1-1132823354
Wolferio
2005-11-24 12:09
2005.12.18
Команды печати


6-1126157400
JohnS
2005-09-08 09:30
2005.12.18
Indy + FTP


4-1129270424
Чапаев
2005-10-14 10:13
2005.12.18
Создать property sheet page


14-1132901183
Ega23
2005-11-25 09:46
2005.12.18
С днем рождения! 25 ноября





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский