// 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!
//
//程序说明:这个示例程序演示了如使用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!