线程我是用API的方式创建的,现在我想通过判断这个线程的状态来确定按钮的单击事件是执行‘挂起’还是‘唤醒’的操作
hThread:=CreateThread(nil,0,@MyThreadFun,nil,CREATE_SUSPENDED,ID);

解决方案 »

  1.   

    需要自己计数,或者从ResumeThread和SuspendThread返回值确定挂起次数unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button2: TButton;
        Button3: TButton;
        procedure FormDestroy(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      mThread: Cardinal;
      mCount: integer;
      mTag: integer;implementation{$R *.dfm}function MyThreadFun(p: pointer): Integer; stdcall;
    begin
            while true do
            begin
                    Inc(mCount);
                    Form1.Memo1.Lines.Add('running' + IntToStr(mCount));
                    sleep(1000);
            end;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
            TerminateThread(mThread,0);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
            if mTag>0 then
            begin
                    ResumeThread(mThread);
                    Dec(mTag);
            end;
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
            if mTag=0 then
            begin
                    SuspendThread(mThread);
                    Memo1.Lines.Add('Suspend');
                    Inc(mTag);
            end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
            id: dword;
    begin
            mCount := 0;
            mThread := CreateThread(nil,0,@MyThreadFun,nil,CREATE_SUSPENDED,ID);
            mTag := 1;
    end;end.