Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сделать чтобы форма реагировала во время работы потоков. [D7, WinXP]


Страницы:   1 2 3 4

Kolan ©   (2005-05-27 10:09:00) 

Здравствуйте,
 Разбираюсь с потоками, нашел статью:
http://www.realcoding.net/article/view/158
Сделал пример где два потока, один включает флажок CheckBox'а другой выключает.
Если я всё правильно понял, то потоки должны работать себе и работать а форма нормально реагировать на все события.

Но форма как будто висит. Точнее мне всёже удалось передвинуть её, но переместилась она с большой задержкой.

Вот код потока:

type
 TMyThread1 = class(TThread)
 private
    { Private declarations }
 protected
   procedure DoWork;
   procedure Execute; override;
 end;


procedure TMyThread1.Execute;
begin
while not Terminated do
 Synchronize(DoWork);
end;

procedure TMyThread1.DoWork;
begin
 Form1.CheckBox.Checked := True;
end;

Ну соотвественно второй
Form1.CheckBox.Checked := False;

Код главного юнита.

var
 Form1: TForm1;
  T1: TMyThread1;
  T2: TMyThread2;


На форме одна кнопка:
procedure TForm1.StopButtonClick(Sender: TObject);
begin
 if StopButton.Caption = 'Ñòîï' then
 begin
   {Ïðåðûâàåì îáà ïðîöåññà}
   T1.Terminate;
   T2.Terminate;
   StopButton.Caption := 'Ñòàðò';
 end
 else
 begin
   {Ñîçäàåì è ñðàçó çàïóñêàåì äâà ïðîöåññà}
   T1 := TMyThread1.Create(False);
   T2 := TMyThread2.Create(False);

   StopButton.Caption := 'Ñòîï';
 end;
end;


Что я нетак понял или сделал?


ЮЮ   (2005-05-27 10:15:00) [61]

Synchronize(DoWork);

Т.е. вся работа потоков сводится к выполнению методов DoWork в основном кодовом потоке, вместо того, чтобы делать нечто в своем потоке


-=XP=-   (2005-05-27 10:13:00) [62]

while not Terminated do
begin
Synchronize(DoWork);
Sleep(100); // милисекунд
end;


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо