huangyi5209

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  0 Posts :: 13 Stories :: 0 Comments :: 0 Trackbacks

常用链接

留言簿

我参与的团队

搜索

  •  

最新评论


自动重置事件内核对象

#include "stdafx.h"
#include 
<windows.h>
#include 
<iostream>

using namespace std;

DWORD WINAPI Tf()
{
    cout
<<"thread instantiated "<<endl;

    HANDLE hEvent 
= OpenEvent(EVENT_ALL_ACCESS, FALSE, __T("MyEvent"));
    
if (!hEvent)
        
return -1;

    
for (char counter = 0; counter < 2; counter++//char
    {
        WaitForSingleObject(hEvent, INFINITE);
        cout
<<"Got The Single"<<endl;
    }

    CloseHandle(hEvent);
    cout
<<"End of the Thread"<<endl;
    
return 0;
}


int main(){
    
//    Create an Auto Reset Event which automatically reset to 
    
//    Non Signalled state after being signalled
    HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, __T("MyEvent"));
    
if (!hEvent)
        
return -1;

    DWORD Id;
    HANDLE hThrd 
= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Tf, 00&Id);
    
while(!hThrd)
    
{
         CloseHandle(hThrd);
         
return -1;
    }

    
// Wait for a while before continuing.
    Sleep(1000);

    
for (char counter = 0; counter < 2; counter++)
    
{
        
// Signal the event
        SetEvent(hEvent);
        
// wait for some time before giving another signal
        Sleep(2000);
    }

    
// Wait for the Thread to Die
    WaitForSingleObject(hThrd, INFINITE);
    CloseHandle(hThrd);
    CloseHandle(hEvent);
    
    cout
<<"End of Main .."<<endl;

    system(
"pause");
    
return 0;
}

手动重置事件内核对象
DWORD WINAPI Tf()
{
    cout
<<"thread instantiated "<<endl;

    HANDLE hEvent 
= OpenEvent(EVENT_ALL_ACCESS, FALSE, __T("MyEvent"));
    
if (!hEvent)
        
return -1;

    
for (char counter = 0; counter < 2; counter++//char
    {
        WaitForSingleObject(hEvent, INFINITE);
        
// We need to reset the event since the event is manual reset
        
//    event
        ResetEvent(hEvent);
        cout
<<"Got The Single"<<endl;
    }

    CloseHandle(hEvent);
    cout
<<"End of the Thread"<<endl;
    
return 0;
}


int main(){
    
//    Create an Manual Reset Event where events must be reset 
    
//    manually to non signalled state
    HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, __T("MyEvent"));
    
if (!hEvent)
        
return -1;

    DWORD Id;
    HANDLE hThrd 
= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Tf, 00&Id);
    
while(!hThrd)
    
{
         CloseHandle(hThrd);
         
return -1;
    }

    
// Wait for a while before continuing.
    Sleep(1000);

    
for (char counter = 0; counter < 2; counter++)
    
{
        
// Signal the event
        SetEvent(hEvent);
        
// wait for some time before giving another signal
        Sleep(2000);
    }

    
// Wait for the Thread to Die
    WaitForSingleObject(hThrd, INFINITE);
    CloseHandle(hThrd);
    CloseHandle(hEvent);
    
    cout
<<"End of Main .."<<endl;

    system(
"pause");
    
return 0;
}
posted on 2011-03-05 08:30 huangyi5209 阅读(264) 评论(0)  编辑 收藏 引用 所属分类: C/C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理