Event事件

/************************************************************************
** Event 事件
** 同步机制中最富有弹性的机制了。唯一的目的就是成为激发状态或未激发状态
** 而这两种状态完全由程序控制。所以你可以精确告诉一个Event对象做什么事
** 以及什么时候去做。
** 
** 主要函数:
** CreateEvent
** OpenEvent
** SetEvent
** ResetEvent
** PulseEvent

** 参考资料
** http://www.codeproject.com/Articles/438/Introduction-to-Multi-threaded-Code
************************************************************************/

#include <windows.h>
#include <process.h>
#include <stdio.h>

HANDLE hEvent1, hEvent2;
int a[ 5 ];
HANDLE hManualEvent;

const int LOOP_COUNT = 10;

UINT __stdcall Thread( void* pParams )
{
    int num = 1;

    for( int k=0; k < LOOP_COUNT; k++ )
    {
        WaitForSingleObject( hEvent2, INFINITE );
        for ( int i = 0; i < 5; i++ ) a[ i ] = num;
        SetEvent( hEvent1 );
        num++;
    }

    return 0;
}

UINT __stdcall ManualThread( void* pParams )
{
    for ( int k = 0; k < LOOP_COUNT; k++ )
    {
        WaitForSingleObject( hManualEvent, INFINITE );
        printf( "ManualThread is  working %d\n", k );

        // 把手动的Event改为无信号状态
        if ( k == 5 )
        {
            ResetEvent( hManualEvent );
            _endthreadex( 0 );
        }
    }

    return 0;
}

int main( void )
{
    hEvent1 = CreateEvent(
        NULL, 
        FALSE,         // 是否手动
        TRUE,          // 初始化时是否有信号
        NULL );
    hEvent2 = CreateEvent( NULL, FALSE, FALSE, NULL );
    // 手动的Event
    hManualEvent = CreateEvent( NULL, TRUE, FALSE, NULL );

    UINT threadID = 0;
    _beginthreadex( NULL, 0, Thread, NULL, 0, &threadID );

    HANDLE hHandle = (HANDLE)_beginthreadex( NULL, 0, ManualThread, NULL, 0, 0 );

    // 将手动的Event改为有信号状态
    SetEvent( hManualEvent );

    for( int k=0; k < LOOP_COUNT; k++ )
    { 
        WaitForSingleObject( hEvent1, INFINITE );
        printf( "%d %d %d %d %d\n", 
            a[ 0 ], a[ 1 ], a[ 2 ],
            a[ 3 ], a[ 4 ] );
        SetEvent( hEvent2 );
    }

    WaitForSingleObject( hHandle, INFINITE );

    printf("***** Finish ******!");

    return 0;
}

 

posted @ 2012-08-17 14:19  木愚  阅读(228)  评论(0编辑  收藏  举报