WSAWaitForMultipleEvents的用法

// wsawaitformultipleeventsTest.cpp : 定义控制台应用程序的入口点。
//
//程序说明:这个示例程序演示了如使用winsock的等待事件函数。
/*
等事件函数的示例如下:
WSAWaitForMultipleEvents(4, EventArray, FALSE, WSA_INFINITE, FALSE);
其中,第一个参数为事件的个数。第二个参数为事件数组,数组元素的类型为WSAEVENT类型,
第三个参数说明等一个事件,还是等所有的事件,如果只需等众多事件中的一个到来,就开始工作,那么就设为FALSE,
如果需要等待所有的事件均为TRUE,那么,把它设为TRUE.
第四个参数为等待的时间,如果是无限时等待,则把它设为:WSA_INFINITE.
第五个参数为bAertable,不是很了解,直接把它设为FALSE.


本程序先创建一个4个事件,把它放入事件数组中,然后,创建一个线程,在线程中等待各个事件的发生。在主程序中,依次
设置4个事件,然后,在不断循环的线程中,把等到的事件号,打印出来。


按理说,WSAWaitForMultipleEvents返回值需要减去WSA_WAIT_EVENT_0,才能得到真正的数组索引,但在windows,WSA_WAIT_EVENT_0
直接定义为0,所以,减不减都无所谓了。


*/
#include "stdafx.h"


#include <stdio.h>
#include "winsock2.h"


#include <process.h>
#include <conio.h>


#define DATA_BUFSIZE 4096
WSAEVENT EventArray[4];


unsigned int _stdcall threadfunc(void *param)
{
while(1)
{
DWORD index;
index = WSAWaitForMultipleEvents(4, EventArray, FALSE, WSA_INFINITE, FALSE);
DWORD eventNo = index - WSA_WAIT_EVENT_0;
WSAResetEvent(EventArray[eventNo]);
printf("event no:%d happen!\n",eventNo);
Sleep(100);
}
}


void main() {


for(int i=0;i<4;i++)
{
EventArray[i] = WSACreateEvent();
}
 
unsigned  threadID;
HANDLE hThread;
    hThread = (HANDLE)_beginthreadex( NULL,         // security
                                   0,            // stack size
                                   threadfunc,
                                   0,           // arg list
                                   CREATE_SUSPENDED,  
                                   &threadID );
ResumeThread( hThread );
WSASetEvent(EventArray[3]);
Sleep(1000);
WSASetEvent(EventArray[1]);
Sleep(1000);
WSASetEvent(EventArray[2]);
Sleep(1000);
WSASetEvent(EventArray[0]);
Sleep(1000);


_getch();
}

采用VC2008编译通过,运行结果如下:
event no:3 happen!
event no:1 happen!
event no:2 happen!
event no:0 happen!
















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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值