QTcpSocket readyread() 信号无法触发

小虎牙在努力打酱油 2015-07-13 11:20:19
主线程创建一个子线程check用来周期发起tcp连接,为了可以同时与多台主机通信,在此子线程check中又同时创建多个子线程。
在每个子线程中实例化一个对象qtcp,在此对象qtcp中创建QTcpSocket并与其他主机进行通信,在qtcp的构造函数中完成connected()、readyread()等信号的连接,connect函数的返回值均为true。
但是,此时readyread信号总是无法触发,可以确定的是QTcpSocket的connected()信号确实触发了并执行了相应的槽函数,这是什么原因呢?求大神解答~欲哭无泪啊。
ps:当在主线程中实例化这个对象并创建QTcpSocket时,是可以正常触发readyread()信号的,是不是因为在子线程中的原因呢?QTcpSocket在子线程中创建会受影响吗?
...全文
2335 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
walry_dudu 2015-07-21
  • 打赏
  • 举报
回复
引用 6 楼 hellotomorrw 的回复:
[quote=引用 5 楼 walry_dudu 的回复:] 是不是还没等readreay信号发出,socket对像就没啦??
应该不是的。后来就没用Qtcpsocket了,直接使用c++的socket了。[/quote] 用C++的socket行,用QTcpSocket就不行。你搞懂了是为什么吗?求分享
  • 打赏
  • 举报
回复
引用 5 楼 walry_dudu 的回复:
是不是还没等readreay信号发出,socket对像就没啦??
应该不是的。后来就没用Qtcpsocket了,直接使用c++的socket了。
walry_dudu 2015-07-15
  • 打赏
  • 举报
回复
是不是还没等readreay信号发出,socket对像就没啦??
  • 打赏
  • 举报
回复
我好像有点懂了。发现所有的run函数都是用了for,while循环,没有用QT的事件循环,应该是这个原因,我再试一下。谢谢~
dbzhang800 2015-07-13
  • 打赏
  • 举报
回复
1. 注意到你的描述:你重新实现了QThread::run() ,在该函数内你有自己的for或while循环,而不是使用的Qt的事件循环。 这足以使得你的QTcpSocket的信号无法被生成并发射。 2. 另外,你的connect中都手动指定了Qt::DirectConnection 如果你不能确切回答为什么要用它,那么你很可能也做错了。
  • 打赏
  • 举报
回复
主线程中创建了check线程,然后在check线程的run()函数会一直循环去判断是否符合条件,满足条件的情况下再生成多个子线程。在每个子线程的run函数中执行 QTcp *qTcp = new QTcp; QTcp的构造函数如下: QTcp(){ socket = new QTcpSocket(this); if (socket) { connect(socket, SIGNAL(connected()), this, SLOT(socketConnected()),Qt::DirectConnection); connect(socket, SIGNAL(disconnected()), this, SLOT(socketConnectionClosed()),Qt::DirectConnection); connect(socket, SIGNAL(readyRead()), this, SLOT(socketReadyRead()),Qt::DirectConnection); } 在每个子线程中调用qTcp->socket.connectToHost(ip, port),在槽函数socketConnected()中设置断点发现槽函数被调用,而连接成功后sockedtReadyRead()槽函数一直没有被调用。
dbzhang800 2015-07-13
  • 打赏
  • 举报
回复
单靠你提供的信息无法判断你哪儿错了。一般来说,QThread用错的可能性最大。你可以简单描述:你的QTcpSocket和QThread是如何创建的,QThread内有没有事件循环等。

16,240

社区成员

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

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