必威体育Betway必威体育官网
当前位置:首页 > IT技术

CreateEvent使用

时间:2019-08-17 12:43:14来源:IT技术作者:seo实验室小编阅读:89次「手机版」
 

createevent

windows API——createevent——创建事件

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

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);
}

相关阅读

oracle触发器使用总结

博客园 首页 新随笔 联系 管理 订阅 随笔- 94  文章- 1  评论- 71  oracle触发器使用总结 1.说明 1)触发器是一种特殊的

多闪app如何使用?

多闪app如何使用?多闪app是一款十分专业的集短视频与聊天为一体的社交应用,软件支持上传精彩短视频,多样性的编辑工具助力打造炫酷

matlab7.0安装 win7系统详细使用方法附软件下载

MATLAB 7.0下载地址: 百度网盘下载地址:http://pan.baidu.com/share/link?shareid=414204&uk=2769186556 迅雷快传下载地址:http:/

C# 使用FileSystemWatcher类来对一个日志文件的变化进

C# 使用FileSystemWatcher类来对一个日志文件的变化进行实时监测 应用场景描述:在我的工作中,遇到这么一个情况,有一个没有源码的程

知名网站如何使用黄金分割布局

在所有的比例中黄金分割是最能引起人的美感的,0.618被公认为最具有审美意义的比例数字。黄金分割之所以那么普遍的流行,我猜一定跟

分享到:

栏目导航

推荐阅读

热门阅读