![]() |
Функции 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; Так и должно быть? |
Когда функция исполнения потока доходит до своего логического конца, то работа потока, конечно, прекращается.
P.S. Кстати, а почему ты не пользуешься наследником TThread? |
Цитата:
Кстати, это вообще похоже на синхронизацию или пример неудачный? |
Конечно получится!
Рекомендую прочитать статейку 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.