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();
}