• 3146阅读
  • 3回复

[提问]关于子线程里面的QTcpSocke的问题 [复制链接]

上一主题 下一主题
离线tangbao203
 

只看楼主 倒序阅读 楼主  发表于: 2014-07-29
Main Thread 中 初始化 Obj1
然后Obj1->moveToThread(p_childThread)
p_childThread->start();

在这个子线程里面所执行的任何  new QTcpSocket 或者 new QTcpServer 都会出现下列警告
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QNativeSocketEngine(0xadc00df0), parent's thread is QThread(0x81c0298), current thread is QThread(0x806e000)

这是怎么回事?
在线liulin188

只看该作者 1楼 发表于: 2014-07-29
你new的实际是在主线程new的
网络,还有串口等都是一样的,Qt之所把这些他们做成异步,就是不想让你再弄多线程了。
https://wiki.qt.io/Qt_5.12_Release
https://wiki.qt.io/New_Features_in_Qt_5.12
https://wiki.qt.io/Qt_5.12.0_Known_Issues
https://www.qt.io/blog/qt-5.13.2-released
https://www.qt.io/blog/qt-creator-4.10.2-released
https://wiki.qt.io/Qt_5.12_Tools_and_Versions
离线foruok

只看该作者 2楼 发表于: 2014-07-29
要在子线程的线程环境(比如run()函数,或者 event() )中来new,且不能以线程对象(QThread及派生类)为父,并且run()函数必须以 exec() 结束。
我的博客:http://blog.csdn.net/foruok
我的微信订阅号:程序视界
在线liulin188

只看该作者 3楼 发表于: 2014-07-29
或者不要new了,直接弄个局部对象放在栈上,也是可行的。

不过这些都违背了Qt设计者的本意啊。
https://wiki.qt.io/Qt_5.12_Release
https://wiki.qt.io/New_Features_in_Qt_5.12
https://wiki.qt.io/Qt_5.12.0_Known_Issues
https://www.qt.io/blog/qt-5.13.2-released
https://www.qt.io/blog/qt-creator-4.10.2-released
https://wiki.qt.io/Qt_5.12_Tools_and_Versions
快速回复
限100 字节
 
上一个 下一个