CreateEvent

CreateEvent该函数的作用和用法

HANDLE     CreateEvent(
        LPSECURITY_ATTRIBUTES     lpEventAttributes,     //     事件属性,一般为NULL   
        BOOL     bManualReset,                                                 //     是否自动设置为有信号:是TRUE,否FALSE
        BOOL     bInitialState,                                                      //     初始化状态:有信号TRUE,无信号FALSE   
        LPCTSTR     lpName                                                      //     信号量别名 ,可置为NULL
    ); 

注:

手动和自动重置为有信号解释:TRUE,当线程结束后会自动设置事件为有信号,FALSE,当线程结束后需要手动设置有信号


创建一个事件,该事件有两个信号:有信号和无信号;

在不同的线程中,使用等待一个事件是否有信号和无信号,来达到多个不同的线程之间的同步,达到对某一数据同一时间内只能有一个线程访问;

例如:

#include "stdafx.h"
#include <Windows.h>


DWORD WINAPI ThreadProc1(LPVOID lparam);
DWORD WINAPI ThreadProc2(LPVOID lparam);


HANDLE hEvent = NULL;
int _tmain(int argc, _TCHAR* argv[])
{
int nCount = 0;


//hEvent = CreateEvent(NULL,FALSE,TRUE,NULL);//手动设置有信号,初始为有信号
hEvent = CreateEvent(NULL,TRUE,TRUE,NULL);//自动设置有信号,初始为有信号


HANDLE hThread1 = NULL;
hThread1 = CreateThread(NULL,0,ThreadProc1,&nCount,0,NULL);
if (NULL == hThread1)
{
printf("Create ThreadProc1 failed\n");
}
CloseHandle(hThread1);
Sleep(500);


HANDLE hThread2 = NULL;
hThread2 = CreateThread(NULL,0,ThreadProc2,&nCount,0,NULL);
if (NULL == hThread2)
{
printf("Create ThreadProc2 failed\n");
}
CloseHandle(hThread2);


getchar();


return 0;
}


DWORD WINAPI ThreadProc1(LPVOID lparam)
{
int *p = (int*)lparam;
// while (1)
// {
DWORD nReturn = WaitForSingleObject(hEvent,INFINITE);
if (WAIT_OBJECT_0 == nReturn)
{
printf("ThreadProc1:%d\n",++(*p));
//SetEvent(hEvent);//自动设置有信号时,需要使用它设置事件为有信号
}
// }
return 0;
}


DWORD WINAPI ThreadProc2(LPVOID lparam)
{
int *p = (int*)lparam;
// while (1)
// {
DWORD nReturn = WaitForSingleObject(hEvent,INFINITE);
if (WAIT_OBJECT_0 == nReturn)
{
printf("ThreadProc2:%d\n",++(*p));
  //SetEvent(hEvent);//自动设置有信号时,需要使用它设置事件为有信号
}

// }
return 0;
}

参考自:http://blog.csdn.net/richerg85/article/details/7471426

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值