您的位置:首页 > 其它

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

2016-08-22 15:09 183 查看
事件,使用事件就需要获得事件的句柄。

事件的创建是用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;
}

运行结果如图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  windows 线程