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

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…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值