多线程编程(9) - 认识等待函数 WaitForSingleObject
生活随笔
收集整理的這篇文章主要介紹了
多线程编程(9) - 认识等待函数 WaitForSingleObject
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一下子跳到等待函數(shù) WaitForSingleObject, 是因為下面的 Mutex、Semaphore、Event、WaitableTimer 等同步手段都要使用這個函數(shù); 不過等待函數(shù)可不止 WaitForSingleObject 它一個, 但它最簡單.
function WaitForSingleObject(hHandle: THandle; {要等待的對象句柄}dwMilliseconds: DWORD {等待的時間, 單位是毫秒} ): DWORD; stdcall; {返回值如下:}WAIT_OBJECT_0 {等著了, 本例中是: 等的那個進(jìn)程終于結(jié)束了} WAIT_TIMEOUT {等過了點(你指定的時間), 也沒等著} WAIT_ABANDONED {好不容易等著了, 但人家還是不讓咱執(zhí)行; 這一般是互斥對象}//WaitForSingleObject 的第二個參數(shù)一般給常數(shù)值 INFINITE, 表示一直等下去, 死等.
WaitForSingleObject 等待什么? 在多線程里就是等待另一個線程的結(jié)束, 快來執(zhí)行自己的代碼; 不過它可以等待的對象可不止線程; 這里先來一個等待另一個進(jìn)程結(jié)束的例子, 運行效果圖:
代碼文件:
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}varhProcess: THandle; {進(jìn)程句柄}{等待一個指定句柄的進(jìn)程什么時候結(jié)束} function MyThreadFun(p: Pointer): DWORD; stdcall; beginif WaitForSingleObject(hProcess, INFINITE) = WAIT_OBJECT_0 thenForm1.Text := Format('進(jìn)程 %d 已關(guān)閉', [hProcess]);Result := 0; end;{啟動一個進(jìn)程, 并建立新線程等待它的結(jié)束} procedure TForm1.Button1Click(Sender: TObject); varpInfo: TProcessInformation;sInfo: TStartupInfo;Path: array[0..MAX_PATH-1] of Char;ThreadID: DWORD; begin{先獲取記事本的路徑}GetSystemDirectory(Path, MAX_PATH);StrCat(Path, '\notepad.exe');{用 CreateProcess 打開記事本并獲取其進(jìn)程句柄, 然后建立線程監(jiān)視}FillChar(sInfo, SizeOf(sInfo), 0);if CreateProcess(Path, nil, nil, nil, False, 0, nil, nil, sInfo, pInfo) thenbeginhProcess := pInfo.hProcess; {獲取進(jìn)程句柄}Text := Format('進(jìn)程 %d 已啟動', [hProcess]); CreateThread(nil, 0, @MyThreadFun, nil, 0, ThreadID); {建立線程監(jiān)視}end; end;end.
窗體文件:
object Form1: TForm1Left = 0Top = 0Caption = 'Form1'ClientHeight = 124ClientWidth = 241Color = clBtnFaceFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11Font.Name = 'Tahoma'Font.Style = []OldCreateOrder = FalsePixelsPerInch = 96TextHeight = 13object Button1: TButtonLeft = 88Top = 56Width = 75Height = 25Caption = 'Button1'TabOrder = 0OnClick = Button1Clickend end
轉(zhuǎn)載于:https://www.cnblogs.com/del/archive/2009/02/13/1390069.html
總結(jié)
以上是生活随笔為你收集整理的多线程编程(9) - 认识等待函数 WaitForSingleObject的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】cron
- 下一篇: 详介oracle的RBO/CBO优化器