SetEvent ResetEvent等的理解

#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 是将信号更改为 无信号状态。

你可能感兴趣的:(c++,算法,开发语言)