使用事件机制同步线程的例子

事件,使用事件就需要获得事件的句柄。

事件的创建是用CreateObject(事件属性指针,

                                              手动清除事件信号还是自动清除事件信号,True是手动,

                                              事件的初始状态,false是事件为激发(就是没激发没发生),

                                              事件的名称)。

返回事件的句柄。

激发一个事件用函数:setEvent(HANDLE hObject);

获取一个现存的事件:OpenEvent(EVENT_ALL_ACCESS, true, "MyEvevt");


设置三个线程,一个主线程,一个读线程和一个写线程,读线程必须在写线程写之后才能读,主线程必须在读线程读之后才能结束
实现:定义两个事件, evRead, evFinish;读线程等待evRead, 主线程等待evFinish.

//使用事件机制同步线程的例子
//设置三个线程,一个主线程,一个读线程和一个写线程,
//读线程必须在写线程写之后才能读,主线程必须在读线程读之后才能结束
/*
实现:定义两个事件, evRead, evFinish;读线程等待evRead, 主线程等待evFinish.
*/

#include <iostream>
#include <Windows.h>
#include <process.h>

using namespace std;

HANDLE evRead, evFinish;

void ReadThread(void* param){
	//等待读事件
	WaitForSingleObject(evRead, INFINITE);
	//读操作
	cout << "reading" << endl;
	//激发事件evFinish
	SetEvent(evFinish);
}

void WriteThread(void* param){
	//写操作
	cout << "writing" << endl;
	//唤醒读事件
	SetEvent(evRead);
}

int main()
{
	//创建两个事件,并初始化为未激发状态
	evRead = CreateEvent(NULL, false, false, NULL);
	evFinish = CreateEvent(NULL, false, false, NULL);
	
	//创建读线程和写线程
	_beginthread(ReadThread, 0, NULL);
	_beginthread(WriteThread, 0, NULL);

	//等待事件evFinish
	WaitForSingleObject(evFinish, INFINITE);
	cout << "the program is end." << endl;

	return 0;
}

运行结果如图:





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值