线程同步——内核对象实现线程同步——事件内核对象
2014-08-16 11:05
387 查看
事件内核对象 事件类型对象有两种不同类型,手动重置和自动重置 手动重置:当一个手动重置对象被触发时候,等待该对象的所有线程变为可调度。 自动重置:当一个自动重置对象被触发时,只有一个等待该事件的线程会变为可调度 下面是一个创建事件内核对象的函数: HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, PCTSTR lpName ); 第一、四个参数和创建其它内核对象相似想必已经十分熟悉了。 这里就不介了哈。 第二个参数bManualReset是一个BOOL值,告诉系统是手动重置对象(TRUE),还是自动重置对象(FALSE). 第三个参数bInitialState是将事件初始化为触发状态(TRUE),还是未触发状态(FALSE) BOOL SetEvent( HANDLE hEvent ) ; 该函数把事件变为触发状态 BOOL ResetEvent( HANDLE hEvent ) ; 该函数把事件变为未触发状态 使用方法: 1) //定义一个事件对象1 HANDLE g_hEvent ; 2) //创建一个手动重置的事件对象,并把事件出事话为触发状态 g_hEvent = CreateEvent(NULL,FALSE,TRUE,NULL); 3) //在线程中调用 DWORD WINAPI ThreadFunOne(PVOID pvParam) { WaitForSingleObject(g_hEvent,INFINITE); g_x++; return 0; } #include "windows.h" #include "iostream" using namespace std; long g_x = 0 ; //定义一个事件对象1 HANDLE g_hEvent ; //定义线程函数1 DWORD WINAPI ThreadFunOne(PVOID pvParam) ; //定义线程函数2 DWORD WINAPI ThreadFunTwo(PVOID pvParam); int main() { //创建一个手动重置的事件对象,并把事件出事话为触发状态 g_hEvent = CreateEvent(NULL,TRUE,TRUE,NULL); //把事件设为未触发状态 // ResetEvent(g_hEvent); //把事件设为触发状态 // SetEvent(g_hEvent) ; //创建线程1 HANDLE hThreadOne = CreateThread(NULL,0,ThreadFunOne,0,0,NULL); CloseHandle(hThreadOne); //创建线程2 HANDLE hThreadTwo = CreateThread(NULL,0,ThreadFunTwo,0,0,NULL); CloseHandle(hThreadTwo); //让主线程先挂起,确保其它线程执行完成 Sleep(1000); cout<<g_x<<endl; return 0 ; } DWORD WINAPI ThreadFunOne(PVOID pvParam) { WaitForSingleObject(g_hEvent,INFINITE); g_x++; return 0; } DWORD WINAPI ThreadFunTwo(PVOID pvParam) { Sleep(200); WaitForSingleObject(g_hEvent,INFINITE); g_x++; return 0; }
相关文章推荐
- 事件对象实现线程同步
- 线程同步--事件内核对象
- 线程同步——内核对象实现线程同步——等待函数
- 内核模式下的线程同步——事件内核对象
- 利用事件对象实现线程同步
- 事件对象实现线程同步
- [C++] socket - 5 [API事件对象实现线程同步]
- 线程同步——内核对象实现线程同步——信号量
- 用事件对象(Event)实现简单线程同步
- 多线程实现线程同步——事件对象
- 使用事件对象实现线程同步
- <<Windows核心编程(第五版)>>第九章用内核对象进行线程同步:9.3事件内核对象
- 多线程火车票售票系统——人工重置事件对象实现线程同步(会有问题的)
- 线程同步——内核对象实现线程同步——可等待计时器内核对象
- windows笔记-【内核对象线程同步】事件内核对象
- 利用事件对象实现线程同步
- 《Windows via C/C++》学习笔记 —— 内核对象的“线程同步”之“事件内核对象”
- Windows-核心编程-09-如何用内核对象进行线程同步-事件内核对象
- Windows Via C/C++:内核模式下的线程同步——事件内核对象
- VC++多线程,互斥对象,事件对象,关键代码段实现线程同步