UI线程能够使用线程池么?

jonezheng 2005-09-03 12:55:17
如题
我写了一个线程池,但只是针对work线程的
现在我想让它支持UI线程,可以么?
...全文
235 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
horris 2006-04-19
  • 打赏
  • 举报
回复
对于楼主的这种需求,想要用多个线程处理socket,完全可以用I/O完成端口办到:
1。先建一个UI线程,用CreateIoCompletePort生成一个完成端口;
2。在UI线程里listen,建立与客户端的连接和用于接收的数据套接字。
3。然而以后与客户端的通信,则可以通过PostQueuedCompletionStatus(参数为与客户端通信的socket)发给线程池,线程池中的线程用GetQueuedCompletionStatus获得通知和socket,进行实际的通信或处理。
这样做效率很好。
也许你觉得这样太复杂,实际上大多数服务端程序都是这样做的。注意一个socket是对整个进程都有效的,所以可以在线程间安全地传递它。所以你还可以用其它的方式,用UI线程接收连接请求,建立socket,以后的通信让线程池里的线程去处理。
runi 2005-12-02
  • 打赏
  • 举报
回复
楼主的线程池是怎么写的?主线程如何控制池中各个线程的状态呢?指教指教吧!多谢
rfa 2005-12-02
  • 打赏
  • 举报
回复
UI线程肯定是要给Windows用某种方法注册一下的,不然每个进程都可以有无数个线程(理论上),那么Windows到底要把消息发给谁?难道挨个发一遍??!
rfa 2005-12-02
  • 打赏
  • 举报
回复
线程绝对不是简单的写个消息循环就变成了UI线程了,这一点大伙切记!不然你让一个WorkerThread编程一个UI Thread我看看
jonezheng 2005-09-12
  • 打赏
  • 举报
回复
明白了
可以不用线程池
但是我做网络,客户端来一个连接服务器就要创建一个UI线程
因为我要用到socket类的各种消息响应,如:OnReceive,好像用那个工作者线程不行吧
nelsonc 2005-09-07
  • 打赏
  • 举报
回复
不知道楼主使用UI线程池要达到什么目的。
一般程序中都只有一个UI线程。多个UI线程的还没见过,不是说不可以做,而是多个UI线程根本就没有必要。
feelmoon 2005-09-07
  • 打赏
  • 举报
回复
krh2001(边城浪子)说的好!楼猪看明白没?
jerry 2005-09-06
  • 打赏
  • 举报
回复
线程池嘛,是管理一组线程,池里应该包含一些正在工作的线程和一些空闲的线程,当有任务时,线程池管理就选一个空闲的线程去处理任务,张程处理完后又变成空闲状态,回到线程沁池.

UI线程大家都说了,是一个消息循环,它始终在运行,不存在空闲和忙之分(至少不是象工作线程那样分的)所以不好用线程池的方式来管理. 既然所有的线程都在运行,都是在进行自身的调度,就没有必要使用线程池了.
oyljerry 2005-09-04
  • 打赏
  • 举报
回复
UI线程单独控制
线程池控制work thread比较好
jonezheng 2005-09-03
  • 打赏
  • 举报
回复
只要在线程中有消息循环,不就成了UI线程了么?
这个我也知道
我现在就是想能不能用线程池对UI线程进行管理
DentistryDoctor 2005-09-03
  • 打赏
  • 举报
回复
没听说过UI线程池。

线程池就线程池嘛,只要在线程中有消息循环,不就成了UI线程了么?
吹泡泡的小猫 2005-09-03
  • 打赏
  • 举报
回复
UI线程从windows底层上讲和work线程没有区别
jonezheng 2005-09-03
  • 打赏
  • 举报
回复
到底有哪些不好,大伙可不可以说得详细点?
dirdirdir3 2005-09-03
  • 打赏
  • 举报
回复
这样做不好。
jerry 2005-09-03
  • 打赏
  • 举报
回复
我觉得这个思路有问题。线程池用来处理事务。本身跟UI应该无关的,UI线程用这种方式工作似乎不大正常

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧