windows下线程同步方式(事件)

事件:
事件可以实现线程之间的同步,如线程A创建事件,线程B等候该事件,,事件的等候遵循谁先等候,谁先获取执行权,事件初始状态可以设置为有信号的,当线程B等到该信号,立马可以获取到执行权,执行完自己要执行的代码块之后,重置事件为无信号状态,此时线程A中又将该事件设置为有信号状态,线程B发现该事件有信号,又开始执行,这样可以达到一个线程控制另外一个线程,达到线程的同步目的;
事件是一个内核对象,可以对不同进程中的线程进行同步;

// Event.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "conio.h"
#include "windows.h"
#define BUFFER 10
HANDLE g_hEvent = NULL;

DWORD WINAPI SendProc( LPVOID pParam )
{
    while( 1 )
    {
        SetEvent( g_hEvent );
        Sleep( 1000 );
    }
    return 0;
}

DWORD WINAPI RecvProc( LPVOID pParam )
{
    LONG nIndex = 0;
    while( 1 )
    {   //等候事件信号
        WaitForSingleObject( g_hEvent, INFINITE );       
        printf( "Recv Proc %d\n", nIndex );
        nIndex++;
        //重置事件为无信号状态
        ResetEvent( g_hEvent );
    }
    return 0;
}

void Event( )
{   //创建事件
    g_hEvent = CreateEvent( NULL, TRUE, TRUE, NULL );
    DWORD nThreadID   = 0;
    HANDLE hThread[2] = { 0 };
    hThread[0] = CreateThread( NULL, 0, RecvProc,NULL, 0, &nThreadID );
    hThread[1] = CreateThread( NULL, 0, SendProc,NULL, 0, &nThreadID );
    WaitForMultipleObjects( 2, hThread, TRUE, INFINITE );
    CloseHandle( hThread[0] );
    CloseHandle( hThread[1] );
    //关闭事件
    CloseHandle( g_hEvent );
}

int main(int argc, char* argv[])
{
    Event();
 getch( );
 return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值