首页 > 其他分享 >CreateEvent函数

CreateEvent函数

时间:2023-07-03 12:34:21浏览次数:29  
标签:函数 对象 线程 事件 信号 Event CreateEvent

事件对象就像一个开关:它只有两种状态---开和关。当一个事件处于”开”状态,我们称其为”有信号”否则称为”无信号”。可以在一个线程的执行函数中创建一个事件对象,然后观察它的状态,如果是”无信号”就让该线程睡眠,这样该线程占用的CPU时间就比较少。

产生事件对象的函数如下:

HANDLE CreateEvent(

LPSECURITY_ATTRIBUTES lpEventAttributes, // SD
BOOL bManualReset, // reset type
BOOL bInitialState, // initial state
LPCTSTR lpName // object name
);
该函数创建一个Event同步对象,如果CreateEvent调用成功的话,会返回新生成的对象的句柄,否则返回NULL。

参数说明:
lpEventAttributes 一般为NULL


bManualReset 创建的Event是自动复位还是人工复位.如果true,人工复位, 一旦该Event被设置为有信号,则它一直会等到ResetEvent()API被调用时才会恢复 为无信号. 如果为false,Event被设置为有信号,则当有一个wait到它的Thread时, 该Event就会自动复位,变成无信号. 如果想 在每次调用WaitForSingleObject 后让WINDOWS为您自动地把事件地状态恢复为”无信号”状态,必须把该参数设为FALSE,否则,您必须每次调用ResetEvent函数来清除事件 的信号。


bInitialState 初始状态,true,有信号,false无信号
lpName 事件对象的名称。您在OpenEvent函数中可能使用。

注释:
一个Event被创建以后,可以用OpenEvent()API来获得它的Handle,用CloseHandle() 来关闭它,用SetEvent()或PulseEvent()来设置它使其有信号,用ResetEvent() 来使其无信号,用WaitForSingleObject()或WaitForMultipleObjects()来等待其变为有信号.

PulseEvent()是一个比较有意思的使用方法,正如这个API的名字,它使一个Event 对象的状态发生一次脉冲变化,从无信号变成有信号再变成无信号,而整个操作是原子的.
对自动复位的Event对象,它仅释放第一个等到该事件的thread(如果有),而对于人工复位的Event对象,它释放所有等待的thread.


这里有两个API函数用来修改事件对象的信号状态:SetEvent和ResetEvent。前者把事件对象设为”有信号”状态,而后者正好相反。
在事件对象生成后,必须调用WaitForSingleObject来让线程进入等待状态,该函数的语法如下:

WaitForSingleObject proto hObject:DWORD, dwTimeout:DWORD

hObject -->指向同步对象的指针。事件对象其实是同步对象的一种。
dwTimeout --> 等待同步对象变成”有信号”前等待的时间,以毫秒计。当等待的时间超过该值后无信号同步对象仍处于”无信号”状态,线程不再等待, WaitForSingleObject函数会返回。如果想要线程一直等待,请把该参数设为INFINITE(该值等于0xffffffff)。

 

 

<<<转载

标签:函数,对象,线程,事件,信号,Event,CreateEvent
From: https://www.cnblogs.com/Zhaolongtao/p/17522438.html

相关文章

  • python一题多解:编写函数 change(str1) ,其功能是对参数 str1 进行大小写转换
    #习题6,3.编程题,p95#(2)编写函数change(str1),其功能是对参数str1进行大小写转换,#将大写字母转换成小写字母;#小写字母转换成大写字母;#非英文字符不转换。#类似p54,4.编程题(1),用分支语句实现。defchange1(str1):ret=""foriinrange(len(s......
  • Framebuffer 应用编程中涉及的 API 函数
    论  坛:http://bbs.100ask.net/(学术答疑)公 众 号:百问科技版本日期作者说明V12020韦东山摘自《嵌入式Linux应用开发完全手册》本节程序的目的是:打开LCD设备节点,获取分辨率等参数,映射Framebuffer,最后实现描点函数。5.2.1open函数在Ubuntu中执行“man2open”,可以看到o......
  • Python | datetime库函数的详解
    datetime是Python内置的日期时间处理库,它包含了处理日期、时间、时间间隔等的类和函数。datetime库可以从系统中获得时间,并以用户选择的格式输出。下面是datetime常用的类和函数以及它们的详细解释。datetime类datetime类是date和time两个类的结合体,表示一个具体的......
  • PL/SQL表---table()函数用法
     PL/SQL表---table()函数用法:利用table()函数,我们可以将PL/SQL返回的结果集代替table。simpleexample:1、table()结合数组:*/createorreplacetypet_testasobject(idinteger,rqdate,mcvarchar2(60));createorreplacetypet_test_tableastableo......
  • Excel函数大全
    Excel函数大全数据库和清单管理函数DAVERAGE返回选定数据库项的平均值DCOUNT计算数据库中包含数字的单元格的个数DCOUNTA计算数据库中非空单元格的个数DGET从数据库中提取满足指定条件的单个记录DMAX返回选定数据库项中的最大值DMIN返回选定数据......
  • GO语言调用外部函数失败总结
    目录GO练习的项目结构Q1导入的是空路径Q2导入的路径不全Q3找不到路径A3Q4函数不可调用A4Q5报错UseasvalueA5GO练习的项目结构@:~/goProject/test.cn$tree.├──go.mod├──main.go└──model  └──mysql.go1directory,3filesQ1导入的是空路径......
  • 当函数遇上图片,比如Filter
    Filter函数可以说是包揽了一切查找,嗯,够辛苦。有木有想过,如果Filter遇上图片,又是怎样的风景呢?就是这个样几滴……这里的图片可以是两种,一种是由Image函数生成的,另一种是放置在单元格中的图片。其实,这并不是Filter的独享,因为图片作为单元格对象,所以几乎可以说是所有函数,都能对......
  • 【Python基础】index函数-返回查找对象的首个匹配的索引位置
    描述从列表中找出某个值第一个匹配项的索引位置返回的是查找对象的索引位置,如果没有,就会抛出异常语法List.index(a,start,end)参数解释a要查找的对象(必填)start要查找的范围的开始位置索引(闭区间)(非必填)end要查找的范围的结束位置索引(开区间)(有end就必须有start,有start时可以没end)举......
  • python的sort函数与sorted函数排序
    1.sort函数sort函数为python内置的列表排序高阶函数,所谓高阶函数,也就是参数为函数或返回值为函数。先看个简单的例子:# 数字列表的排序示例nums=[5,2,9,1,7]nums.sort()print(nums)#输出:[1,2,5,7,9]可以发现排序后,改变了原列表的顺序。而且sort......
  • assert断言与const修饰指针的妙用(模拟实现strcpy函数)
     assert断言目录assert断言的妙用:头文件:使用方法:const修饰指针的妙用主要用法const在*左边const在*右边断言和const修饰指针的应用模拟实现C语言strcpy函数  1、若字符串str1,str2有空指针怎么办?  2.str2改变了怎么办?assert断言的妙用:头文件:#include<assert.h>使用方法:当......