Qt 网络编程 信号和槽

Ruabit 2017-03-25 07:47:42
如果两个客户端同时给服务器发了消息,触发了同一个槽函数,,这种情况下会出bug吗?
...全文
893 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
LMZ_YAO 2017-06-01
  • 打赏
  • 举报
回复
学习了.
astro_lee 2017-05-31
  • 打赏
  • 举报
回复
引用 6 楼 chenzhp 的回复:
槽函数的执行实际上都是有顺序的。
那得看你的连接类型是不是Qt::QueuedConnection
astro_lee 2017-05-31
  • 打赏
  • 举报
回复
QTcpServer本来就是事件驱动制的(也就是QueuedConnection),所以不存在楼主说的同时触发一个槽的情况
chenzhp 2017-05-31
  • 打赏
  • 举报
回复
槽函数的执行实际上都是有顺序的。
  • 打赏
  • 举报
回复
1.信号槽机制在有信号发送时,如果connect时候最后一个参数是Qt::QueuedConnection,则信号会进入排队等待,只有当前信号对应的槽函数处理完了才会轮到下一个信号对应的槽函数被调用。.并且服务器接收消息也有先后之别,即使同时接收到,也会依次放入一个队列中,即必定会有先后之别,因此不存在同一时刻。 2.如果你担心还是会有同一时刻接收到这个事情发生,则在槽函数中加个互斥锁,同一时间只允许一个线程使用互斥锁内的资源,这样当前槽函数调用后获取到互斥锁,即使在同一时刻接收到消息后又调了该槽函数,也会等待资源释放掉才能获取到互斥锁。
C_522 2017-05-02
  • 打赏
  • 举报
回复
不会。服务器对不同客户端接收数据是分开的。 你服务器对不同客户端接收数据后处理,涉及到对同一对象进行数据处理时,就需要加锁。 其他没什么大问题
  • 打赏
  • 举报
回复
引用 2 楼 m0_37618678 的回复:
[quote=引用 1 楼 qq_20553613 的回复:] 这就是竞态问题,自己做好保护机制,完全没问题的。假设一个客户端开一个线程,至于那个线程优先级、保护机制、线程让出时间等,需要自己根据实际情况处理,最明显的不能以线程优先级作为唯一的线程让出条件,假如A客户端一直发送数据,那么其他客户端接收线程就一直被挂起了。
能不能详细一点,,新手对这些都不是很懂,,保护机制具体是什么[/quote] 应该指的是同步锁。
Ruabit 2017-03-30
  • 打赏
  • 举报
回复
引用 1 楼 qq_20553613 的回复:
这就是竞态问题,自己做好保护机制,完全没问题的。假设一个客户端开一个线程,至于那个线程优先级、保护机制、线程让出时间等,需要自己根据实际情况处理,最明显的不能以线程优先级作为唯一的线程让出条件,假如A客户端一直发送数据,那么其他客户端接收线程就一直被挂起了。
能不能详细一点,,新手对这些都不是很懂,,保护机制具体是什么
Acuity. 2017-03-26
  • 打赏
  • 举报
回复
这就是竞态问题,自己做好保护机制,完全没问题的。假设一个客户端开一个线程,至于那个线程优先级、保护机制、线程让出时间等,需要自己根据实际情况处理,最明显的不能以线程优先级作为唯一的线程让出条件,假如A客户端一直发送数据,那么其他客户端接收线程就一直被挂起了。

16,173

社区成员

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

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