API建立的线程如何判断‘挂起’、‘唤醒’的状态,求教育
线程我是用API的方式创建的,现在我想通过判断这个线程的状态来确定按钮的单击事件是执行‘挂起’还是‘唤醒’的操作
hThread:=CreateThread(nil,0,@MyThreadFun,nil,CREATE_SUSPENDED,ID);
[解决办法]
需要自己计数,或者从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.