多线程更新ui的一个问题

clever101
博客专家认证
2017-12-11 06:49:07
在许多行业应用中,客户端-服务架构不可替代。在客户端-服务架构下,服务扮演着重要的角色。现在用qt编写一个服务端和客户端程序(都是桌面UI程序),大致的架构是在一个局域网环境内有一个服务端和多个客户端,多个客户端访问一个服务端,客户端一连接服务端,服务端这边的界面就立即把客户端的ip信息添加到客户端列表中。现在设想这样一个情景:多个客户端几乎同时上线,服务端这边使用多线程socket来应对多个客户端连接,那么如何几乎更新客户端列表这个控件呢?我想这里估计得涉及到互斥。

我搜索了网上的一个qt的多线程更新界面的例子,基本上都是自定义一个工作线程,然后在工作线程里使用自定义的信号和槽来进行更新,这里只是解决单个线程更新单个UI的问题。如何解决多个线程同时更新一个UI呢?
...全文
2099 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
尘中远 2018-04-24
  • 打赏
  • 举报
回复
放心,ui线程只会在主线程,如果你的更新都是通过信号槽,一点问题都没用,qt自己会排队。
tyousi 2018-04-11
  • 打赏
  • 举报
回复
UI的更新只能在主线程中做,所以不能同时更新UI,只能按先后顺序更新
待续_1006 2018-03-15
  • 打赏
  • 举报
回复
不管多少个线程,更新服务器的ui函数应该是一个公共函数吧,在函数里加锁,同一个时刻只能一个线程来进行UI更新操作,其他的排列等待去
萧洛 2018-03-15
  • 打赏
  • 举报
回复
一个对象只能moveThread一次好吗。 不同线程对同一个资源进行操作,加锁就可以了,参考QMutex的使用方法
走好每一步 2017-12-13
  • 打赏
  • 举报
回复
UI线程 线程1 一定要moveThread! 线程2 一定要moveThread!
张小飞Official 2017-12-12
  • 打赏
  • 举报
回复
引用 3 楼 clever101 的回复:
[quote=引用 2 楼 u010370871 的回复:] 这个服务器相关了,你可能需要一个线程池,然后你的界面那里还是普通的信号槽就能处理
有线程池,我在想多线程同时更新一个控件会不会有资源竞争的问题?[/quote] connect最后一个有线程相关的参数。可能得来回moveThread
clever101 2017-12-12
  • 打赏
  • 举报
回复
引用 2 楼 u010370871 的回复:
这个服务器相关了,你可能需要一个线程池,然后你的界面那里还是普通的信号槽就能处理
有线程池,我在想多线程同时更新一个控件会不会有资源竞争的问题?
张小飞Official 2017-12-12
  • 打赏
  • 举报
回复
这个服务器相关了,你可能需要一个线程池,然后你的界面那里还是普通的信号槽就能处理
dext 2017-12-12
  • 打赏
  • 举报
回复
这个对于Qt来说我觉得从来就不是问题,信号槽 本来就是轻松跨线程的。

16,212

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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