消息关闭
    暂无新消息!

Qt 网络编程 信号和槽

问题作者 : 板蓝根2017-06-05发布
如果两个客户端同时给服务器发了消息,触发了同一个槽函数,,这种情况下会出bug吗?

6个回答

︿ 2
1.信号槽机制在有信号发送时,如果connect时候最后一个参数是Qt::QueuedConnection,则信号会进入排队等待,只有当前信号对应的槽函数处理完了才会轮到下一个信号对应的槽函数被调用。.并且服务器接收消息也有先后之别,即使同时接收到,也会依次放入一个队列中,即必定会有先后之别,因此不存在同一时刻。
2.如果你担心还是会有同一时刻接收到这个事情发生,则在槽函数中加个互斥锁,同一时间只允许一个线程使用互斥锁内的资源,这样当前槽函数调用后获取到互斥锁,即使在同一时刻接收到消息后又调了该槽函数,也会等待资源释放掉才能获取到互斥锁。
︿ 0
不会。服务器对不同客户端接收数据是分开的。
你服务器对不同客户端接收数据后处理,涉及到对同一对象进行数据处理时,就需要加锁。
其他没什么大问题
︿ 0
QTcpServer本来就是事件驱动制的(也就是QueuedConnection),所以不存在楼主说的同时触发一个槽的情况
︿ 0
这就是竞态问题,自己做好保护机制,完全没问题的。假设一个客户端开一个线程,至于那个线程优先级、保护机制、线程让出时间等,需要自己根据实际情况处理,最明显的不能以线程优先级作为唯一的线程让出条件,假如A客户端一直发送数据,那么其他客户端接收线程就一直被挂起了。