资源描述:
《[Delphi]多线程编程(9)认识等待函数 WaitForSingleObje》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一下子跳到等待函数WaitForSingleObject,是因为下面的Mutex、Semaphore、Event、WaitableTimer等同步手段都要使用这个函数;不过等待函数可不止WaitForSingleObject它一个,但它最简单.functionWaitForSingleObject(hHandle:THandle;{要等待的对象句柄}dwMilliseconds:DWORD{等待的时间,单位是毫秒}):DWORD;stdcall;{返回值如下:}WAIT_OBJECT_0{等着了,本例中是:等的那个进程终于
2、结束了}WAIT_TIMEOUT{等过了点(你指定的时间),也没等着}WAIT_ABANDONED{好不容易等着了,但人家还是不让咱执行;这一般是互斥对象}//WaitForSingleObject的第二个参数一般给常数值INFINITE,表示一直等下去,死等.WaitForSingleObject等待什么?在多线程里就是等待另一个线程的结束,快来执行自己的代码;不过它可以等待的对象可不止线程;这里先来一个等待另一个进程结束的例子,运行效果图:代码文件:unitUnit1;interfaceusesWindows,Mess
3、ages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;typeTForm1=class(TForm)Button1:TButton;procedureButton1Click(Sender:TObject);end;varForm1:TForm1;implementation{$R*.dfm}varhProcess:THandle;{进程句柄}{等待一个指定句柄的进程什么时候结束}functionMyThreadFun(p:Point
4、er):DWORD;stdcall;beginifWaitForSingleObject(hProcess,INFINITE)=WAIT_OBJECT_0thenForm1.Text:=Format('进程%d已关闭',[hProcess]);Result:=0;end;{启动一个进程,并建立新线程等待它的结束}procedureTForm1.Button1Click(Sender:TObject);varpInfo:TProcessInformation;sInfo:TStartupInfo;Path:array[0..
5、MAX_PATH-1]ofChar;ThreadID:DWORD;begin{先获取记事本的路径}GetSystemDirectory(Path,MAX_PATH);StrCat(Path,'otepad.exe');{用CreateProcess打开记事本并获取其进程句柄,然后建立线程监视}FillChar(sInfo,SizeOf(sInfo),0);ifCreateProcess(Path,nil,nil,nil,False,0,nil,nil,sInfo,pInfo)thenbeginhProcess:=pIn
6、fo.hProcess;{获取进程句柄}Text:=Format('进程%d已启动',[hProcess]);CreateThread(nil,0,@MyThreadFun,nil,0,ThreadID);{建立线程监视}end;end;end.