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…