测试也可以很技术!

【测试技术】I/O模型之一:select模型 + 线程池(二)

上一篇 / 下一篇  2012-12-06 21:26:44 / 个人分类:win socket网络编程

Win socket编程I/O模型之一:select模型 + 线程池()

-----牛奋原创,转载注明出处,谢谢!-----

 

       上一讲讲了select模型的基本使用方法,这一讲主要讲利用select模型 + 线程池,进而处理多于64个连接的情况。

       首先需要定义两个结构体

typedef struct _SOCKET_OBJ

{

       SOCKET sock;                       //SOCKET 套接字

       _SOCKET_OBJ* pNextSocketObj;       //指向下一个

}SOCKET_OBJ,*PSOCKET_OBJ;

 

#define MAX_SOCKETS_PER_THREAD 64

typedef struct _THREAD_OBJ

{

       SOCKET sockAry[MAX_SOCKETS_PER_THREAD];  //每个线程都需要维护一个SOCKET数组

       int iCurrentCount;                       //当前本线程中SOCKET个数

       PSOCKET_OBJ pSockHead;                   //当前线程中SOCKET_OBJ链表首地址

       PSOCKET_OBJ pSockTail;                   //当前线程中SOCKET_OBJ链表尾地址

       CRITICAL_SECTION cs;                     //当前线程同步关键段

       _THREAD_OBJ* pNextThreadObj;             //指向下一个THREAD_OBJ

}THREAD_OBJ,*PTHREAD_OBJ;

 

整个程序的处理的结构参见附件图片。NND,居然无法直接贴图。

 

 

主线程负责:

1)  创建与服务器的连接,为每个连接创建对象SOCKET_OBJ,并将创建的SOCKET_OBJ交给线程处理;

2)  等待子线程退出;

 

子线程负责:

1)  每个子线程都不断轮询本线程内部的THREAD_OBJSOCKET数组中的SOCKET,调用select的那几个步骤,对这些SOCKET进行处理。

2)  InsertSocketObj方法会根据当前SOCKET实际数量,决定是否需要创建新的线程。

 

具体代码详见附件。


TAG:

 

评分:0

我来说两句

日历

« 2024-04-26  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 3210
  • 日志数: 3
  • 建立时间: 2012-11-26
  • 更新时间: 2012-12-06

RSS订阅

Open Toolbar