[Win32]事件

Posted websecyw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Win32]事件相关的知识,希望对你有一定的参考价值。

一、通知类型

HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes, // SD 安全描述符号

BOOL bManualReset, // reset type  //希望Event是通知类型填写true
BOOL bInitialState, // initial state //是否创建立马可以使用(有无信号)
LPCTSTR lpName // object name 起名称

);

// my8.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "windows.h"

HANDLE g_hEvent;

DWORD WINAPI ThreadProc_1(LPV0ID lpParameter)
{
	
	TCHAR szBuffer[10]={0};
	WaitForSingleObject(g_hEvent,INFINITE);
	printf("ThreadProc_1执行了 
");
	getchar();
	return 0;


}
DWORD WINAPI ThreadProc_2(LPV0ID lpParameter)
{

	TCHAR szBuffer[10]={0};
	WaitForSingleObject(g_hEvent,INFINITE);
	printf("ThreadProc_2执行了 
");
	getchar();
	return 0;


}


int main(int argc, char* argv[])
{      //参数二默认安全属性 TRUE通知/FALSE互斥
	g_hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); //通知改,互斥不改
	HANDLE hThread[2];
	hThread[0]=CreateThread(NULL,0,ThreadProc_1,NULL,0,NULL);
	hThread[1]=CreateThread(NULL,0,ThreadProc_2,NULL,0,NULL);
	SetEvent(g_hEvent);  //把自己挂起唤醒另外一个线程
	WaitForMutiple0bjects(2,hThread,TRUE,INFINITE);
	CloseHandle(hThread[0]);
	CloseHandle(hThread[1]);
	CloseHandle(g_hEvent);
	return 0;

}

二、线程同步

<1>.线程互斥:线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性,当有若干个线程访问同一个资源。最多只允许一个线程使用,其他要使用的必须等待,直到占用资源者释放该资源。(有我没你,有你没我)

<2>线程同步:线程同步就是线程之间的一种制约关系,一个线程的执行依赖另外一个线程的消息,当它没有得到另外一个线程的消息时应等待,直到消息到达被唤醒。同步=互斥+有序

技术图片

 

图中说明互斥后未必是A执行一次B执行一次有可能A线程执行多次,互斥只能有一个线程执行,线程同步,两个线程互斥,互斥+有序就是线程同步。

 

以上是关于[Win32]事件的主要内容,如果未能解决你的问题,请参考以下文章

SDL 事件调试问题

事件日志、模拟和拒绝访问 Win32Exception

python将文本转换成语音的代码

如何将键盘事件发送到 Pywin32 中的不同窗口?

如何在 win32 gui 应用程序中使用另一个事件循环

android:来自片段的菜单项单击事件