我想收到socket数据后在线程池里做一些业务处理,问题来了:
1. QueueUserWorkItem不是自动启动线程池么,那么应该放在select之后还是recv之后? 
2. 如果是在recv之后,是不是还要把socket id和数据作为参数传递一下?
3. 使用QueueUserWorkItem之前需要创建IO完成端口吗? 看了几个例子, 还有点糊涂, 请高手指点.

解决方案 »

  1.   

    线程池都是我自己写的,而且线程间通信规则也是我自己做的。
    MS那个线程池过于简陋,而且服务器一般不用select io这种处理模型。
      

  2.   


    啊, 以前的项目可都是用select, 一般情况下够用了, 不过是在linux下做的, Windows的线程池怎么做比较好?
      

  3.   

    请看这个帖子: http://topic.csdn.net/t/20060427/14/4718115.html不知道 kingzai(stevenzhu)还在不在论坛里混, 线程池不是已经用了完成端口了么, 为什么还要在程序里创建呢?
      

  4.   

    QueueUserWorkItem 可以看作使用系统自带的线程池,在该线程池中启动线程
    具体参数参考 MSDN
    只是一个异步操作,跟完成端口或select/recv没有关系,把这两个问题分开看
      

  5.   

    Windows的线程池.
    这里我使用了一种三层消息队列+“V”型通信规则对线程进行管理的。三层队列:
    1.发送消息队列
    2.响应消息队列
    3.保留消息队列“V”型通信规则是说
    如果T1想与T2进行消息交互那么T1->Service->T2反之T2->Service->T1对于线程安全队列windows下R3自带FIFO队列
    如果想使用更复杂的队列管理方式自能自行解决。
      

  6.   

    看来你还没有完全理解完成端口的异步模式,建议你找本讲述 socket I/O 模型的书来看一看,或者 google 两篇文章理解下