![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать чтобы форма реагировала во время работы потоков. [D7, WinXP]
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;