Qt中的Socket跨线程控制

妙笔花生 2017-09-14 09:50:58
开辟了一个线程,用Socket来循环读东西:
class RcvThd:public QThread{
public:
MySocket * m_pSocket;//继承自QTcpSocket
void Run(){
m_pSocket = new QTcpSocket;
while(1){
m_pSocket->Read();
}
}
}

//主界面里往socket里与数据
class MainWindow{
void clicked(){
m_pSocket->write(...);
}
}

但在主界面里这样往socket写数据,会引发异常。我要怎么处理?
我查了相关资料,说要把m_pSocket放到线程里。
如果这样的话,我要怎么控制往m_pSocket的写数据
...全文
1514 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
a308253767 2017-09-27
  • 打赏
  • 举报
回复
继承QTcpSocket生成一个新子类RcvSocket,在子类里,绑定QtcpSocket::readyRead信号和接收槽RcvSocket::slDataRecved。在调用的线程的run()里,绑定RcvSocket::slSendMsg(发送数据槽)和信息发送(比如说是SgBeginSendMsg)。绑定完后,调用线程的exec,进入事件循环。要使用的时候,emit SgBeginSendMsg
妙笔花生 2017-09-27
  • 打赏
  • 举报
回复
引用 3 楼 qqwangfan 的回复:
QTcpSocket操作都需要放在同一个线程里面。写数据的话,可以主线程发信号将数据发送到子线程,子线程定义缓冲期来接收主线程的数据,再在子线程里面发送。
试过,有问题。
妙笔花生 2017-09-27
  • 打赏
  • 举报
回复
最后我的解决方法是,继承QTcpSocket生成一个新子类RcvSocket,在子类里,绑定QtcpSocket::readyRead信号和接收槽RcvSocket::slDataRecved。在调用的线程的run()里,绑定RcvSocket::slSendMsg(发送数据槽)和信息发送(比如说是SgBeginSendMsg)。绑定完后,调用线程的exec,进入事件循环。要使用的时候,emit SgBeginSendMsg
  • 打赏
  • 举报
回复
QTcpSocket操作都需要放在同一个线程里面。写数据的话,可以主线程发信号将数据发送到子线程,子线程定义缓冲期来接收主线程的数据,再在子线程里面发送。
橙儿稻香 2017-09-18
  • 打赏
  • 举报
回复
Socket是TCP通信 你这样通信还不如用文件通信。。。 并没有看到你连接的逻辑 其次是当你要链接TCP开始发送接受数据的时候应按都要扔给线程去做 第三 要主线程控制就用SIGNAL消息 + connect信号槽 来实现 要发送指定的东西例如QString就通过消息传递参数
dext 2017-09-14
  • 打赏
  • 举报
回复
把写 也放在 和 读 一样的线程里,然后 主线程 发信号槽消息过去。

16,202

社区成员

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

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