/************************************************************************
** 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;
}
转载于:https://www.cnblogs.com/c007136/archive/2012/08/17/2643985.html
相关资源:各显卡算力对照表!