Windows事件内核对象
来源:互联网 发布:js修改div的style 编辑:程序博客网 时间:2024/05/20 11:27
事件触发表示一个操作已经完成。
事件对象的两种类型:
手动重置事件:当一个手动重置事件被触发的时候,正在等待该事件的所有线程都将变成可调度状态。
自动重置事件:当一个自动重置事件被触发的时候,只有一个正在等待该事件的线程编程可调度状态,如果存在
多个线程等待此事件的话,唤醒线程是随机的(Microsoft官方回答)。
事件对象的创建函数:
HANDLE CreateEvent(
PSECURITY_ATTRIBUTES psa,
BOOL bManualReset,
BOOL bInitialState,
PCTSTR pszName);//事件的名称,如果为NULL,就为匿名事件
bManualReset:如果为TRUE表示创建一个手动重置事件,如果为FALSE表示自动重置事件。
bInitialState:表示将事件初始化为触发状态(TRUE),为触发状态(FALSE)。
当成功创建事件之后,返回的事件句柄与当前进程相关联。
//创建事件内核对象的扩展函数
HANDLE CreateEventEx(
PSECURITY_ATTRIBUTES psa,
PCTSTR pszName,
DWORD dwFlags,
DWORD dwDsireAccess);
//其他进程中的线程可以通过打开一个已经存在的事件
HANDLE OpenEvent
DWORD dwDesiredAccess,
BOOL bInherit,
PCTSTR pszName);
//将事件变成触发状态
BOOL SetEvent( HANDLE hEvent);
//将事件变成未触发状态
BOOL ResetEvent(HANDLE hEvent);//当线程成功等到自动重置事件对象的时候,事件会自动地重置为未触发状态。
此时不需要调用ResetEvent,这是因为系统会自动将事件重置。
eg:
HANDLE g_hEvent ;
DWORD WINAPI WordCount(PVOID pvParam)
{
WaitForSingleObject(g_hEvent,INFINITE);
//Access the memory block;
.....
ResetEvent(g_hEvent);
return 0 ;
}
DWORD WINAPI SpellCheck(PVOID pvParam)
{
WaitForSingleObject(g_hEvent,INFINITE);
//Access the memory block;
.....
ResetEvent(g_hEvent);
return 0 ;
}
DWORD WINAPI GrammarCheck(PVOID pvParam)
{
WaitForSingleObject(g_hEvent,INFINITE);
//Access the memory block;
.....
ResetEvent(g_hEvent);
return 0 ;
}
int main()
{
//创建手动重置事件
g_hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
HANDLE hThread[3] ;
hThread[0] = _beginThreadex(NULL,0,WordCount,NULL,0,NULL);
hThread[1] = _beginThreadex(NULL,0,SpellCheck,NULL,0,NULL);
hThread[2] = _beginThreadex(NULL,0,GrammarChech,NULL,0,NULL);
//触发事件,则三个线程都会变成可调度状态
SetEvent(g_hEvent);
System("pause");
return 0;
}
如果创建的事件为自动重置事件,那么我们需要在每个子线程运行完毕之前,调用SetEvent(g_hEvent),以便让其他线程运行。
我们应该在不需要事件内核对象的时候调用CloseHandle函数来将它关闭。
- Windows事件内核对象
- windows笔记-【内核对象线程同步】事件内核对象
- windows笔记-【内核对象线程同步】事件内核对象
- windows核心编程-事件内核对象
- Windows进程同步之事件内核对象(Event)
- Windows核心编程学习八:事件内核对象
- windows核心编程第三章学习事件内核对象代码
- Windows-核心编程-09-如何用内核对象进行线程同步-事件内核对象
- 事件内核对象 CreateEvent
- 事件内核对象Event
- -【内核对象线程同步】事件内核对象
- Windows Via C/C++:内核模式下的线程同步——事件内核对象
- WINDOWS内核对象
- WINDOWS内核对象
- windows 内核对象
- windows 内核对象II
- Windows程序设计- 内核对象
- Windows内核对象
- Jquery中"$(document).ready(function(){ })"函数的使用详解
- 前端上传组件Plupload使用指南
- opengl 几种变换和变换次序
- (四)java实现文档的在线浏览-使用swftools将pdf转换为swf
- you need to use a theme.appcompat theme (or descendant) with this activity 解决办法
- Windows事件内核对象
- DWZ框架学习之优缺点
- 关于NSlog
- 望奎在逃犯罪人员信息记录查询
- 再回首,数据结构——头插法、尾插法建表
- 望奎手机GPS卫星定位追踪找人
- 谷歌浏览器开发工具使用教程
- 呼玛身份证号码户籍地址信息查询
- iOS滚动视图UIScrollView使用方法