您的位置:首页 > 编程语言

windows核心编程-9.用内核对象进行线程同步

2015-11-25 22:15 495 查看
9.1 等待函数

9.2 等待成功所引起的副作用

9.3 事件内核对象

9.4 可等待的计时器内核对象

9.5 信号量内核对象

9.6 互斥量内核对象

9.7 线程同步对象速查表

9.8 其他线程同步函数

1. 等待函数

DWORD WaitForSingleObject(
HANDLE hObject,
DWORD dwMilliseconds
);
// hObject 标志要等待的内核对象
// dwMilliseconds指定线程最多愿意花多久来等待对象被触发
// INFINITE表示愿意无限等待


WaitForSingleObject等待函数使一个线程自愿进行等待,直到等待内核对象被触发为止。

//eg;
DWORD dw=WaitForSingleObject(hProcess,5000);
switch(dw){
case WAIT_OBJECT_0:
//the process termited
break;
case WAIT_TIME_OUT:
//the process did not temited within 5000 milliseconds
break;
case WAIT_FAILED:
//bad call to function
break;
}


DWORD WaitForMultipleObjects(
DWORD dwCount;//我们希望函数检查内核对象的数量
CONST HANDLE* phObjects,//指向内核对象句柄的数组
BOOL bWaitAll,//告诉我们函数希望使用哪种方式
DWORD dwMilliseconds
);
//如果bWaitAll=TRUE 在所有内核对象触发之前 函数不会允许调用线程继续执行。
//...........=FALSE 有一个内核对象触发,函数就会立即返回


//example
HANDLE h[3];
h[0]=hProcess0;
h[1]=hProcess1;
h[2]=hProcess2;
DWORD dw=WaitForMultipleObjects(3,h,FALSE,5000);
switch(dw){
case WAIT_FAILED:
//BAD CALL
break;
case WAIT_TIMEOUT:
//
break;
case WAIT_OBJECT_0+0:
// h[0]
break;
case WAIT_OBJECT_0+1:
// h[1]
break;
case WAIT_OBJECT_0+2:
// h[2]
break;

}


2. 等待成功所引起的副作用

3.事件内核对象

HANDLE CreateEvent(
PSECURITY_ATTRIBUTES psa,
BOOL bManualReset,//TRUE-手动重置事件 FALSE-自动重置事件
BOOL bInitalState,//初始化状态为触发状态TRUE还是未触发状态FALSE
PCTSTR pszName
);

HANDLE CreateEventEx(
PSECURITY_ATTRIBUTES psa,
PCTSTR pszName,
DWORD dwFlags,
DWORD dwDesiredAccess
);


控制内核事件状态 触发/未触发

BOOL SetEvent(HANDLE hEvent);
BOOL ResetEvent(HANDLE hEvent);


4. 可等待的计时器内核对象

HANDLE CreateWaitableTimer(
PSECURITY_ATTRIBUTES psa,
BOOL bManualReset,
PCTSTR pszName
);


over…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  windows