Qt中一个socket对象只能在同一个线程使用

在Qt中,一个socket对象必须在同一线程内创建和使用,跨线程使用会导致错误。测试表明,无论是主线程还是子线程创建socket,都应在创建线程内操作,否则会出现“QObject: Cannot create children for a parent that is in a different thread.”错误。为确保正常工作,应避免跨线程访问变量,而是通过信号槽机制传递数据。
摘要由CSDN通过智能技术生成

Qt在不同线程使用socket报错:

QObject: Cannot create children for a parent that is in a different thread.
(Parent is QTcpServer(0x1538a748), parent’s thread is QThread(0x15380578), current thread is QThread(0x15388d20)

测试方法

1、创建一个新的类CSocketTest,继承QObject;
2、创建一个QThread的对象;
3、创建一个QTcpServer的对象;
4、在初始化函数中,调用new QTcpServer,然后在connect的槽函数中调用new QTcpServer(子线程);

测试代码

CSocketTest的头文件

包含头文件:
QThread
QTcpServer

定义变量:
private:
QThread m_threadTest;
QTcpServer *m_tcpServer;

定义初始化函数:
void init();

定义信号,槽:
signals:
void notifySocketTest();

public slots:
void onNotifySocketTest();

CSocketTest的cpp文件

构造函数,使用moveToThread关联类与

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值