如果想追踪当前占用CPU的线程,在Delphi里面比较麻烦,不容易作到。因为
每个线程获得的时间片都是很短的,如果普通的技术能追踪到,就不能称为
多任务的系统了。
但是对于某些特殊的线程,比如定时运行的触发器等可以通过其他手段得到。
我们可以进一步交流!
每个线程获得的时间片都是很短的,如果普通的技术能追踪到,就不能称为
多任务的系统了。
但是对于某些特殊的线程,比如定时运行的触发器等可以通过其他手段得到。
我们可以进一步交流!
Form1: TForm1;
a: mythread;
b:mythread;
c:mythread;
curthread:tthreadimplementation{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
a:=mythread.create(false)
curthread:=a;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
b:=mythread.create(false)
curthread:=b;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
c:=mythread.create(false)
curthread:=c;
end;
以后就有curthread代表a,b,c。
我觉得这样会出错,因为线程a会因为某种原因挂起,然后线程b运行,这样curthread一会是a,一会是b,但是b开始运行时并没有执行curthread:=b
同步线程,用waitformulitobject来同步!
假设这时A挂起,B开始执行,当B再挂起,A开始执行时,这时的CURTHREAD并不是代表A,而是代表B。
也就并没有执行CURTHREAD:=A,所以会出错。不知道我的想法对吗?