Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Вниз

проблема с потоком 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.014 c
2-1133760075
voe
2005-12-05 08:21
2005.12.18
Корректная обработка ошибок при Sql запросе


2-1133364334
Mak55
2005-11-30 18:25
2005.12.18
Добрый вечер! Покажите плиз пример с использ. ProgressBar


14-1132667294
Opilki_Inside
2005-11-22 16:48
2005.12.18
Алгоритм получение уникального номера железа


14-1132786499
Gero
2005-11-24 01:54
2005.12.18
Продажа компонентов


14-1132835209
ArtemESC
2005-11-24 15:26
2005.12.18
Потерял статью...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский