线程挂起和逐个执行之CreateEvent和WaitForSingleObject

HANDLE g_hEvent = NULL;
int g_Flag = 0;

UINT ThreadPro1(LPVOID prama)
{
 if( g_Flag >= 1)
 {
  WaitForSingleObject(g_hEvent, INFINITE);
 }

 g_Flag++;
 // 对共享资源进行写入操作
 for (int i = 0; i < 20; i++)
 {
  Sleep(10);
 }

 g_Flag--;
 SetEvent(g_hEvent);
 return 1;
}

//循环

 void f1(void)
{
 if( g_hEvent == NULL )
  g_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL ); //这个只出现一次就能随便使用SetEvent

 AfxBeginThread(ThreadPro1, NULL );

}

 

//按钮的执行函数

void CaaaDlg::OnBnClickedOk()
{
 // TODO: 在此添加控件通知处理程序代码

 //第三个参数为False,则CreateEvent调用后为nonsignaled,WaitForSingleObject等待,
 //当SetEvent后为signaled,WaitForSingleObjectj跳过,ResetEvent设置为无信号

 //第二个参数为TRUE 当开始为挂起时,有两个线程挂起,当调用SetEvent设置为有信号,则两个线程都启动
 //当第二个参数为FALSE,开始挂起了两个线程, 然后调用SetEvent设置有信号,则只有一个线程启动,当这个线程结束时,下个线程启动
    //有时又只能通过SetEvent一个一个的启动

 //一个程序中只能有一个CreateEvent,否则,一个线程结束后下个线程不能自动启动(在4个结束后)
 g_Flag = 0;
 //g_hEvent = NULL;
 //SetEvent(g_hEvent); //启动线程
 //ResetEvent(g_hEvent);//挂起线程
 for(int i=0;i<5;i++)
  f1();


 //OnOK();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值