如果想追踪当前占用CPU的线程,在Delphi里面比较麻烦,不容易作到。因为
每个线程获得的时间片都是很短的,如果普通的技术能追踪到,就不能称为
多任务的系统了。
但是对于某些特殊的线程,比如定时运行的触发器等可以通过其他手段得到。
我们可以进一步交流!

解决方案 »

  1.   

    var
      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
      

  2.   

    怎么这样写啊!!
    同步线程,用waitformulitobject来同步!
      

  3.   

    因为你创建了A把它赋给CURTHREAD以后,A开始执行,然后又创建B,赋给CURTHREAD,
    假设这时A挂起,B开始执行,当B再挂起,A开始执行时,这时的CURTHREAD并不是代表A,而是代表B。
    也就并没有执行CURTHREAD:=A,所以会出错。不知道我的想法对吗?