内核对象用于线程同步
2015-03-03 11:03
253 查看
事件内核对象
等待成功所引起的副作用,当事件对象被触发的时候,函数会检测到这一情况,这里它可以直接返回WAIT_OBJECT_0给调用线程,但是在函数返回之前,
它会使事件变为非触发状态---这就是副作用,进程、线程没有这样的副作用。其他对象有不同的副作用。
PluseEvent 相当于SetEvent + ResetEvent
g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event
= CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件 将触发所有
g_event = CreateEvent(NULL,FALSE,FALSE,NULL);//自动重置事件 只触发一个
可等待的计时器对象
与事件一样,手动重置计时器被触发时,所有等待此计时器的线程变成可以高度状态,自动重置计时器被触发时,所有等待此计时器的线程中只有一个变成可以高度状态。
等待成功所引起的副作用,当事件对象被触发的时候,函数会检测到这一情况,这里它可以直接返回WAIT_OBJECT_0给调用线程,但是在函数返回之前,
它会使事件变为非触发状态---这就是副作用,进程、线程没有这样的副作用。其他对象有不同的副作用。
PluseEvent 相当于SetEvent + ResetEvent
#include <iostream> #include <Windows.h> #include <process.h> HANDLE g_event; unsigned __stdcall _StartAddress1 (void *) { WaitForSingleObject(g_event,INFINITE); std::cout<<"_StartAddress1"<<std::endl; return 0; } unsigned __stdcall _StartAddress2 (void *) { WaitForSingleObject(g_event,INFINITE); std::cout<<"_StartAddress2"<<std::endl; return 0; } unsigned __stdcall _StartAddress3 (void *) { WaitForSingleObject(g_event,INFINITE); std::cout<<"_StartAddress3"<<std::endl; return 0; } void main() { g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件 //g_event = CreateEvent(NULL,FALSE,FALSE,NULL);//自动重置事件 _beginthreadex(NULL,0,_StartAddress1,NULL,0,NULL); _beginthreadex(NULL,0,_StartAddress2,NULL,0,NULL); _beginthreadex(NULL,0,_StartAddress3,NULL,0,NULL); Sleep(1); //SetEvent(g_event); PulseEvent(g_event); getchar(); CloseHandle(g_event); }
g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event
= CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件 将触发所有
g_event = CreateEvent(NULL,FALSE,FALSE,NULL);//自动重置事件 只触发一个
可等待的计时器对象
与事件一样,手动重置计时器被触发时,所有等待此计时器的线程变成可以高度状态,自动重置计时器被触发时,所有等待此计时器的线程中只有一个变成可以高度状态。
相关文章推荐
- windows 核心编程之9 内核对象用于线程同步
- 各种内核对象用于线程同步的区别
- 第9章 用内核对象进行线程同步(4)_死锁(DeadLock)及其他
- Chapter09-“内核模式下的线程同步”之信号量内核对象
- windows笔记-【内核对象线程同步】概述
- 线程同步-用内核对象进程线程同步
- -【内核对象线程同步】等待定时器内核对象
- 《Windows via C/C++》学习笔记 —— 内核对象的“线程同步”之“信号量”
- 线程同步 事件 Event 内核对象 CreateEvent
- Windows-核心编程-09-如何用内核对象进行线程同步-事件内核对象
- 第九章:用内核对象进行线程同步(一)
- 第九章 使用内核对象进行线程同步
- windows笔记-【内核对象线程同步】等待函数
- 核心编程笔记9——内核对象的线程同步2
- 【内核对象线程同步】概述
- -【内核对象线程同步】事件内核对象
- 【内核对象线程同步】成功等待的副作用
- 进程与线程(六)用内核对象进行线程同步(下)
- Windows-核心编程-09-如何用内核对象进行线程同步-信号内核对象
- windows笔记-【内核对象线程同步】等待定时器内核对象