![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Здравствуйте.
Начал работать с потоками, разбираться что да как, появилась первая проблема. Поток запускается и работает нормально, но когда я пытаюсь остановить его Thread.Terminate; - ничего не выходит, процессор по прежнему грузится. В потоке у меня бесконечный цикл. Как его остановить? Код:
type
TMyThread1 = class(TThread)
private
{ Private declarations }
protected
procedure DoWork;
procedure Execute; override;
end;
Var
T1 : TMyThread1;
implementation
procedure TMyThread1.Execute;
begin
while not Terminated do
Synchronize(DoWork);
end;
procedure TMyThread1.DoWork;
begin
while true do
begin
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
{Если кнопка называется Stop...}
if Button1.Caption = 'Stop' then begin
T1.Terminate;
{Изменяем название кнопки}
Button1.Caption := 'Start';
{Выходим из процедуры}
Exit;
end;
T1 := TMyThread1.Create(False);
T1.Priority := tpLowest;
Button1.Caption := 'Stop';
end; |
|
#2
|
||||
|
||||
|
Цитата:
|
| Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Alloc (14.02.2016)
| ||
|
#3
|
||||
|
||||
|
т.е. мне следовало просто вписать свой цикл в TMyThread1.Execute а TMyThread1.DoWork; удалить?
|
|
#4
|
||||
|
||||
|
Код:
procedure TMyThread1.Execute;
begin
while not Terminated
do begin
Synchronize(DoWork);
Sleep(50);
end;
end;
procedure TMyThread1.DoWork;
begin
//Что-то делаем в один проход
end; |
|
#5
|
||||
|
||||
|
Цитата:
|
|
#6
|
||||
|
||||
|
пример работы с потоком ннада?
![]() shift+f11 |