有时候忘记了


通过CreateMutex同样也可以创建一个信号量,只不过这个信号量需要用ReleaseMutex才能释放,也就是说当一个线程通过WaitFor....返回以后,在该线程调用ReleaseMutex之前,其它线程的WaitFor...都会挂起,这就是互斥,用于互斥操作的还有很多种,一般的书上都有介绍的

 

 

 HANDLE CreateEvent(

  LPSECURITY_ATTRIBUTES lpEventAttributes, //安全属性

  BOOL bManualReset, //复位方式

  BOOL bInitialState, //初始状态

  LPCTSTR lpName //对象名称

  );

通过CreateEvent创建出来的就是一个信号量,调用该函数时通过参数可指定该信号量的初始值,是否手工复位等属性
调用SetEvent可以使信号量处于有信号状态,如果创建时指定的是自动复位,则在WaitForSingleObject调用返回后,该信号量自动变为无信号状态,如果指定的是手工复位,则即使WaitFor...返回以后该信号量仍然处于有信号状态,必须用ResetEvent来将该信号量恢恢复到无信号状态

 

bManualReset

  [输入]指定将事件对象创建成手动复原还是自动复原。如果是TRUE,那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。如果设置为FALSE,当事件被一个等待线程释放以后,系统将会自动将事件状态复原为无信号状态。

  bInitialState

  [输入]指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。

WaitForSingleObject等待有信号状态

 

 

先用CreateSemaphore初始化最大数和当前数

当前数为0时,信号灯为nonsingled状态,也就是说这时用WaitForSingleObject时会等待直到当前数大于0(或超时),如果不为0时,用WaitForSingleObject就马上返回并把当前数减一;

那如何增加当前数呢? 曰: ReleaseSemaphore.

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值