如题
我写了一个线程池,但只是针对work线程的
现在我想让它支持UI线程,可以么?

解决方案 »

  1.   

    我觉得这个思路有问题。线程池用来处理事务。本身跟UI应该无关的,UI线程用这种方式工作似乎不大正常
      

  2.   

    UI线程从windows底层上讲和work线程没有区别
      

  3.   

    没听说过UI线程池。线程池就线程池嘛,只要在线程中有消息循环,不就成了UI线程了么?
      

  4.   

    只要在线程中有消息循环,不就成了UI线程了么?
    这个我也知道
    我现在就是想能不能用线程池对UI线程进行管理
      

  5.   

    UI线程单独控制
    线程池控制work thread比较好
      

  6.   

    krh2001(边城浪子)说的好!楼猪看明白没?
      

  7.   

    不知道楼主使用UI线程池要达到什么目的。
    一般程序中都只有一个UI线程。多个UI线程的还没见过,不是说不可以做,而是多个UI线程根本就没有必要。
      

  8.   

    明白了
    可以不用线程池
    但是我做网络,客户端来一个连接服务器就要创建一个UI线程
    因为我要用到socket类的各种消息响应,如:OnReceive,好像用那个工作者线程不行吧
      

  9.   

    线程绝对不是简单的写个消息循环就变成了UI线程了,这一点大伙切记!不然你让一个WorkerThread编程一个UI Thread我看看
      

  10.   

    UI线程肯定是要给Windows用某种方法注册一下的,不然每个进程都可以有无数个线程(理论上),那么Windows到底要把消息发给谁?难道挨个发一遍??!
      

  11.   

    对于楼主的这种需求,想要用多个线程处理socket,完全可以用I/O完成端口办到:
    1。先建一个UI线程,用CreateIoCompletePort生成一个完成端口;
    2。在UI线程里listen,建立与客户端的连接和用于接收的数据套接字。
    3。然而以后与客户端的通信,则可以通过PostQueuedCompletionStatus(参数为与客户端通信的socket)发给线程池,线程池中的线程用GetQueuedCompletionStatus获得通知和socket,进行实际的通信或处理。
    这样做效率很好。
    也许你觉得这样太复杂,实际上大多数服务端程序都是这样做的。注意一个socket是对整个进程都有效的,所以可以在线程间安全地传递它。所以你还可以用其它的方式,用UI线程接收连接请求,建立socket,以后的通信让线程池里的线程去处理。