请教有关线程返回信号信号的问题

Qt 主线程返回信号阻塞导致所有信號槽均阻塞用什么方法可以解决这个问题呢? [问题点数:20分]

用Qt写的基于对话框的tcp程序分三个线程返回信号,负责界面显示主线程返回信号、负责tcp接收及报文处理的接收线程返回信号以及负责tcp发送的发送线程返回信号程序的执行流程大概是这样的:接收线程返回信号收箌报文对报文进行解析并组织返回包,处理完毕以信号槽的方式将报文传递给发送线程返回信号进行发送现在的问题是当我鼠标左键长時间单击对话框的关闭按钮时会导致主线程返回信号阻塞,而此时接收线程返回信号和发送线程返回信号之间的信号槽也阻塞了即接收線程返回信号无法将信号发送到发送线程返回信号,请问各位用什么办法可以避免这种矛盾的产生呢另外,界面初始化时也会造成返回報文丢失的情况

之前也考虑过这种方式,但是这样实时性会有所下降因为我在检测到队列内无数据时需要sleep一下,如果不sleep又会导致cpu占用率居高不下程序报文吞吐量较大且实时性要求比较高,所以才采用了信号槽当有报文需要发送时马上通知发送端发送

其实我的问题主要僦是对于Qt多线程返回信号,线程返回信号间的信号槽实际是归属于主线程返回信号的当主线程返回信号出现阻塞就导致了线程返回信號间的信号槽阻塞,不知道有没有什么好的方法规避这个问题……

可否说的详细点没太明白你的意思

请教下:连接不同线程返回信号的信号槽将第五个参数强制设为Qt::DirectConnection,如下

这样会不会有什么隐患呢

请教下:连接不同线程返回信号的信号槽将第五个参数强制设为Qt::DirectConnection,如下

这樣会不会有什么隐患呢为什么这样是线程返回信号不安全的呢?

我觉得楼主不用把注意力一直放在信号槽上线程返回信号之间传递消息也可以使用event,可以查查QApplication::postEvent的使用方法

发送事件的话要带报文传递,好实现吗

匿名用户不能发表回复!

我要回帖

更多关于 线程信号 的文章

 

随机推荐