select线程池设计

select线程池设计
2007-03-12 17:21

相似于WSAEventSelect线程池设计,也是主要分为监听线程和工作线程

监听线程
while (TRUE)
{
     SOCKET sock = accept(socks, NULL, NULL);
     AddSocket(sock);
}

AddSocket(sock) 工作过程:
     for (i = 0; i < 线程数量; i ++)
     {
         if (AddSocketToThread(pThread, sock)) break;
     }
     如果无空闲线程,新建工作线程,并AddSocketToThread()

AddSocketToThread(pThread, sock) 工作过程:
     if (套接口数量 > 64) return FALSE;
     新建套接口对象,插入即可


工作线程
while (TRUE)
{
     锁定
     for (i = 0; i < 套接口数量; i ++)
     {
         FD_SET(&fdWorks, pSockets[i].sock);
     }
     解锁

     ret = select(0, &fdWorks, NULL, NULL, &tv);
     if (ret <= 0) continue;

     for (i = 0 ; i < fdWorks.fdcount; i ++)
     {
         pSocket = FindSockObj(pThread, fdWorks[i]);
         if (pSocket == NULL) continue;

         HandleIO(pThread, pSocket);
     }
}


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值