Главная страница
    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
14-1132911097
Koala
2005-11-25 12:31
2005.12.18
Срочно!!! Нужна помощь в востановлении данных....


14-1133154091
Antonn
2005-11-28 08:01
2005.12.18
Поздравьте меня, у меня сестренка родилась!


2-1133758088
msgipss
2005-12-05 07:48
2005.12.18
Кто удаляет объекты возвращаемые функцией ?


3-1130782933
ksd
2005-10-31 21:22
2005.12.18
как открыть базу на акцесе из read-only каталога (на CD)?


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