不行 它说Application未标识!

解决方案 »

  1.   

    加ProcessMessage没用的,都不是同一个线程,占这么多资源是因为它的无限循环。你的nRingTimes是在哪里定义的?MyThread里?可以这样做,为nRingTimes写一个事件。格式如下,比如你的nRingTimes是一个integer。MyThread = class(TThread)
    private
        FnRingTimes:integer;
        procedure RingTimeChange(nRingTimes:integer);
    public
        property nRingTimes:integer read FnRingTimes write RingTimeChange;
    end;procedure MyThread.RingTimeChange(nRingTimes:integer);
    Begin
      FnRingTimes :=nRingTimes;
    //OK,nRingTimes的值改变了
    //这里写入你想当nRingTimes改变的时候做些什么。
    end;当你执行 MyThread.nRingTimes=1的时候,程序就会执行RingTimeChange去作出反应。这样写其实不算完整的,主要是RingTimeChange的执得是在主线程中,而不是在MyThread所创建的线程里。如果你想RingTimeChange在MyThread里执行,我迟些再写代码。另外,你的写法其实可行的,不过写法有少少的不同。
    procedure MyThread.Execute();
    begin
      WHILE nRingTimes <> Default_RingNum DO
        begin
                //do something
                suspend;
        end;
    end;这样就行啦,当你改变nRingTimes的值之后,再加一句,Mythread.resume就OK啦。还有很多种方法处理你的情况,不过比较复杂,没必要用到。
      

  2.   

    while (not Terminated) and (nRingTimes <> Default_RingNum) do sleep(100);