CreateEvent( )——创建事件函数「建议收藏」

CreateEvent( )——创建事件函数「建议收藏」/***************************************************************************************************

大家好,又见面了,我是你们的朋友全栈君。

/***************************************************************************************************
*   发布日期:
*   更新日期:2017-11-13 17:05:31
*   进度:
*   作者:Luotian
*   备注:事件
***************************************************************************************************/

事件是一个允许一个线程在某种情况发生时,唤醒另外一个线程的同步对象。事件告诉线程何时去执行某一给定的任务,从而使多个线程流平滑

CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,线程锁定方面.

HANDLE CreateEvent(   
LPSECURITY_ATTRIBUTES lpEventAttributes, // 安全属性   
BOOL bManualReset,   
// 复位方式   BOOL bInitialState,   // 初始状态    LPCTSTR lpName     //对象名称    );

lpEventAttributes:   

[输入]一个指向SECURITY_ATTRIBUTES结构的指针,确定返回的句柄是否可被子进程继承。如果lpEventAttributes是NULL,此句柄不能被继承。
Windows NT/2000:lpEventAttributes的结构中的成员为新的事件指定了一个安全符。如果lpEventAttributes是NULL,事件将获得一个默认的安全符。  

bManualReset:   

[输入]指定将事件对象创建成手动复原还是自动复原。
如果是TRUE,那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。
如果设置为FALSE,当事件被一个等待线程释放以后,系统将会自动将事件状态复原为无信号状态。   

bInitialState:   

[输入]指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。  

lpName:   

[输入]指定事件的对象的名称,是一个以0结束的字符串指针。名称的字符格式限定在MAX_PATH之内。名字是对大小写敏感的。
如果lpName指定的名字,与一个存在的命名的事件对象的名称相同,函数将请求EVENT_ALL_ACCESS来访问存在的对象。
这时候,由于bManualReset和bInitialState参数已经在创建事件的进程中设置,这两个参数将被忽略。
如果lpEventAttributes是参数不是NULL,它将确定此句柄是否可以被继承,但是其安全描述符成员将被忽略。
如果lpName为NULL,将创建一个无名的事件对象。

CEvent::SetEvent()把对象设置为有信号状态,释放等待的线程。
CEvent::ResetEvent()把对象设置为无信号状态,程序在WaitForSingleObject(hHandle,INFINITE)处等待。

#include <iostream>
#include <afx.h>
#include <process.h>
using namespace std;
HANDLE hUp; CRITICAL_SECTION g_data;
int arr[10]; HANDLE hEvent; //使用手动重置为无信号状态,初始化时有信号状态
UINT __stdcall Add(LPVOID lParam) { DWORD dReturn = WaitForSingleObject(hEvent,INFINITE); //有信号时才能得到 for (int i = 0; i<10;i++ ) { arr[i]=i;//0-9 } for (int i = 0;i < 10; i++) { cout<<arr[i]<<" "; } cout<<endl; ResetEvent(hEvent);//重置为无信号状态 return 1; } UINT __stdcall Add2(LPVOID lParam) { for (int i = 0; i<100 ;i++) { arr [i] = i+100;//10`1 } for (int i = 0;i < 10; i++) { cout<<arr[i]<<" "; } cout<<endl; SetEvent(hEvent);    //MFC中,CEvent g_event; g_event.SetEvent(); return 1; } int main() { hEvent = CreateEvent(NULL,TRUE,FALSE, NULL); hUp=(HANDLE)_beginthreadex(NULL, 0, Add, NULL, NULL, 0); hUp=(HANDLE)_beginthreadex(NULL, 0, Add2, NULL, NULL, 0); Sleep(5000); }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154248.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • idea如何查找替换_wps表格怎么查找替换文字

    idea如何查找替换_wps表格怎么查找替换文字在平时敲代码的时候经常碰到,咦,这个变量名好像不太合适,但又写了好多这时候可以怎么办呢?Pycharm里面给我们准备了替换功能————–windows电脑—————1.Ctrl+r替换2.Ctrl+Shift+F全局查3.Ctrl+Shift+R全局替换————–MAC电脑—————1.command+F全局查找2.command+R全局替换…

    2022年8月25日
  • 百度–计算机安全

    百度–计算机安全木马终结 …电脑病毒是什么东西呢?是否会像其他病毒,如“H5N1”、“O-157大肠杆菌”、“HIV”一样对人体造成伤害呢?电脑病毒是会造成伤害,但不是对你造成伤害,而是对你的电脑系统造成一定的伤害。其实,电脑病毒是一段非常小的(通常只有几KB)会不断… 14508字 2007-06-20 popo8819 C盘杀手 …病毒病毒名称 : W97M/Thus.A 别名:C盘杀手 病毒特点

    2022年7月25日
  • js操作元素属性_如何将ajax返回的网页加载出来

    js操作元素属性_如何将ajax返回的网页加载出来session时使用sessionStorage.Storage表示存储的意思。一.设置值sessionStorage.setItem(key,value);设置元素的值,setItem.类似于服务器端的setAttribute();二.得到值vardata=sessionStorage.getItem(key);类似于服务器端的getAttribute…

    2022年10月10日
  • webservice技术介绍

    一、WebService到底是什么?   一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术。   所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。    所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台

    2022年4月5日
  • pycharm 全局搜索快捷键「建议收藏」

    pycharm 全局搜索快捷键「建议收藏」pycharm全局搜索快捷键:ctrl+shift+f如果快捷键被系统占用了,那么在pycharm中是不能使用的,我使用的win10自带的输入,这里是已经存在的快捷键,需要关闭才可以使用

    2022年5月31日
  • C语言getchar的用法_getchar的用法

    C语言getchar的用法_getchar的用法getchargetchar的定义MSDN中的解释是从流中读取一个字符intch=getchar()//通过getchar获取字符的ASCII码值传到ch里面存储这里注意:getchar获取字符以后通过ASCII码值的形式存储在ch里为什么不用charch?getchar读到的是一个int类型的数据好处是返回值的时候非常方便接下来我们再看一个示例:intmain(){intch=0;while((ch=getch.

    2022年10月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号