IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Функции Resume- и SuspendThread (http://www.imho.ws/showthread.php?t=82323)

Kuzmich 23.03.2005 18:46

Функции Resume- и SuspendThread
 
Строятся параллельно две синусоиды (Delphi)...

Два потока:
procedure StartThread1;
var thrid:DWord;
begin th1:=CreateThread(nil,0,@thr1,nil,0,thrid); end;

procedure StartThread2;
var thrid:DWord;
begin th2:=CreateThread(nil,0,@thr2,nil,0,thrid); end;

procedure TForm1.FormCreate(Sender: TObject);
begin
...
startthread1;
startthread2;
suspendthread(th2);
...
end;

Сами функции:

function thr1:byte;
begin
y:=55+round(50*sin((x+dx)/25));
y1:=55+round(50*sin(x/25));
form1.image1.Canvas.Pen.Color:=cllime;
form1.image1.Canvas.MoveTo(599,y);
form1.image1.Canvas.LineTo(598,y1);
resumethread(th2);
suspendthread(th1);
end;

function thr2:byte;
begin
y:=65+round(50*sin((x+dx)/25));
y1:=65+round(50*sin(x/25));
form1.image1.Canvas.Pen.Color:=clyellow;
form1.image1.Canvas.MoveTo(599,y);
form1.image1.Canvas.LineTo(598,y1);
form1.image1.Canvas.CopyRect(r2,form1.image1.Canvas,r1);
form1.image1.Canvas.Pen.Color:=clactivecaption;
form1.image1.Canvas.MoveTo(599,0);
form1.image1.Canvas.LineTo(599,121);
x:=x+dx;
resumethread(th1);
suspendthread(th2);
end;

Проблема:
Один раз проходит, затем останавливается и не двигается...
Продолжается построение только если, к примеру в таймере, опять сделать:
startthread1;
startthread2;

Так и должно быть?

ЕЖ 23.03.2005 18:54

Когда функция исполнения потока доходит до своего логического конца, то работа потока, конечно, прекращается.

P.S. Кстати, а почему ты не пользуешься наследником TThread?

Kuzmich 23.03.2005 19:27

Цитата:

P.S. Кстати, а почему ты не пользуешься наследником TThread?
Нужно синхроницацию потоков сделать вручную, с ним получится?
Кстати, это вообще похоже на синхронизацию или пример неудачный?

ЕЖ 23.03.2005 23:56

Конечно получится!
Рекомендую прочитать статейку
http://callipso.bestcode.org/delphi/artical/num2.html


Часовой пояс GMT +4, время: 05:16.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.