多线程-事件

HANDLE CreateEvent(
                    LPSECURITY_ATTRIBUTES lpEventAttributes, // SD
                    BOOL bManualReset,                       // (=TRUE 手动上锁),(=FALSE 自动上锁)
                    BOOL bInitialState,                      // 事件的初始状态,TRUE表示锁是开的状态
                    LPCTSTR lpName);                         // 事件名,可以用于跨进程使用
HANDLE OpenEvent(
                  DWORD dwDesiredAccess,    // 权限
                  BOOL bInheritHandle,      // inheritance option
                  LPCTSTR lpName);          // 事件名字
//防止多开办法之一
if(OpenEvent() == NULL)
{
  //系统没有该实例在运行,创建进程
}
else
{
  return;//表示已经有实例在运行,不再创建,直接退出
}
//主线程通知子线程自动退出
DWORD WINAPI ThreadProc( lpParameter)
{
 while(1)
 {
   DWORD bRet = WaitForSingleObject(hEvent, 0);
   if(bRet == WAIT_TIMEOUT)
   {
     //工作代码......
     //工作代码......
   }
   else if(bRet == WAIT_OBJECT_0)//响应主线程结束事件
   {
     return ;
   }
 }
}

int main()
{
  hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
  hThread = CreateThread();//子线程立马开始工作
  //主线程工作代码......
  //主线程工作代码......
  SetEvent(hEvent);//关闭线程
  WaitForSingleObject(hThread, INFINIT);

}

信号灯

HANDLE CreateSemaphore(
                        LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, //安全属性
                        LONG lInitialCount, 
                        LONG lMaximumCount, 
                        LPCTSTR lpName ); //信号灯名字
 WaitForSingleObject(hSemaphore, INFINIT);内部会对当前资源的个数进行减去1

互斥对象

HANDLE CreateMutex(   
                    LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针   
                    BOOL bInitialOwner, // 初始化互斥对象的所有者,FALSE-表示刚刚创建的这个Mutex不属于任何线程   
                    LPCTSTR lpName);// 指向互斥对象名的指针,可以创建一个有名或无名的互斥量对象。  
//与临界区用法类似,区别在于其在系统0环,可以跨进程使用
//用于有独占要求的程序 (在其进程运行期间不允许其他使用此端口设备的程序运行,或不允许同名程序运行)。
DWORD WaitForMultipleObject(
  DWORD  nCount,              // 表示lphandles数组的元素个数
  CONST HANDLE  *lphandles,   // 指向一个由对象handles组成的数组。
  BOOL  bWaitAll,             // 如果为true,则表示所有的handles都必须激发,此函数才得以返回,否则,此函数将在任何一个handle激发时就返回。
  DWORD dwMilliseconds);      // 超时也返回,可为0,立即返回,INFINITE表示无穷等待。

WaitForMultipleObject();//允许在同一时间等待一个以上的对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值