#include "stdafx.h"
#include
#include
using namespace std;
// void WINAPI ThreadFunc1(LPVOID lpParam);
// void WINAPI ThreadFunc2(LPVOID lpParam);
HANDLE g_event = NULL;
void ThreadFunc1(LPVOID pParam)
{
DWORD wait;
wait = ::WaitForSingleObject(g_event, INFINITE);
for (int i = 0; i < 100; i++)
{
// wait = ::WaitForSingleObject(g_event, INFINITE);
printf("ThreadFunc1:%d\n", i);
Sleep(100);
}
}
void ThreadFunc2(LPVOID pParam)
{
for (int i = 0; i < 5; i++)
{
printf("ThreadFunc2:%d\n", i);
// SetEvent(g_event);
Sleep(1000);
// ResetEvent(g_event);
}
// Sleep(5000);
SetEvent(g_event);
}
int main(int argc, char* argv[])
{
DWORD m_ThreadID[2];
g_event = ::CreateEvent(NULL, FALSE, TRUE, NULL);
ResetEvent(g_event);
::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc1, NULL, 0, &m_ThreadID[0]);
::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc2, NULL, 0, &m_ThreadID[1]);
getchar();
return 0;
}
总结:
有信号状态 代码继续执行。无信号状态代码阻塞在调用::WaitForSingleObject(g_event, INFINITE);的地方。
g_event = ::CreateEvent(
NULL,
FALSE, ----------------true 手动复位为无信号状态 false 自动恢复到无信号状态
TRUE, -----------------true开始状态为有信号状态 false 开始状态为无信号状态
NULL );
SetEvent 是将信号更改为有信号状态。
ResetEvent 是将信号更改为 无信号状态。