Socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

本文介绍的是Qt中采用多线程Socket编程,由于工作的需要,开始接触Qt的socket编程。Qt里的example是个不错的教程,但是当我把代码移植到多线程的环境时就出问题了:

QObject: Cannot create children for a parent that is in a different thread.

由于想要在线程中保留一个socket,以便维持双边通信,因此定义如下:

SocketThread:public QThread

{

....

private:

QTcpSocket _tcpSocket;

}

但是这段代码并无法正常的完成工作,后来在网上搜了一下资料,找到以下解释:“在QThread中定义的所有东西都属于创建该QThread的线程。“

问题出来了,如果按照这个定义,在SocketThread中定义的_tcpSocket,其实是属于mainThread(SocketThread是在main函数中创建),而当我们在SocketThread中的run函数使用到_tcpSocket的时候,其实是跨线程调用,这样就会出现上面的异常。

解决方法: 需要对SocketThread的定义做一下更改:

SocketThread:public QThread

{

....

private:

QTcpSocket* _tcpSocket;

}

在上面我们并没有创建具体的对象,而是定义了一个指针,而如何让指针内的内容从属于SocketThread这个线程呢?答案就是要在SocketThread的run方法中初始化:

SocketThread::run()

... ;

_tcpSocket = new QTcpSocket();

进行以上修改之后上面的异常就不再出现了。

小结:Qt中采用多线程Socket编程的内容介绍完了,在编程过程中我们也不免接触多线程,相信也有一定的了解,最后希望本文对你有所了解!

在使用Qt线程时,在线程里跑上一个定时器。定时器时间超限时触发信号,传递给主线程做其他的事情。

继承QThread后在实现run()函数后,m_pTimer = new QTimer(this);   new一个定时器对象,并传入this指针---注意此时的this指针是主线程的。但每次创建线程时会出现以下提示:

QObject: Cannot create children for a parent that is in a different thread

传入this指针------相当于在子线程里为主线程建立了对象,所以出现跨线程警告。

另外QT中继承Qthread类后,在类中定义的对象或或对象的指针都是属于主线程的。次线程正真意义上的实体内容实在实现run()函数里。

所以,要将mythread线程里的对象或指针创建,需要在run()函数里,创建或分配对象空间。
---------------------

最新文章

  1. 软件工程的引入:Scrum开发框架总结
  2. iOS,信息加解密
  3. hiho #1284 机会渺茫
  4. mysql常用语句、命令(增删改查功能)
  5. TP第一天路由解析
  6. phpmyadmin使用中碰到的一些问题
  7. python datetime时区转换
  8. 虚拟机WindowServer2003共享文件夹
  9. FreeMarker-TemplateLoader
  10. js中继承的方法总结(apply,call,prototype)
  11. nginx健康检查模块源码分析
  12. 【HDOJ 2150】线段交叉问题
  13. 深入理解Java中的迭代器
  14. Go-延时函数defer
  15. 同一台电脑上个人的github账户如何与公司的gitlab账户共存
  16. 转: 关于CAS cpu锁的技术说明。
  17. Spring MVC 上传和下载文件
  18. java字节码的工具(含IDEA插件)
  19. bulk_write&Replace_one
  20. C#编程小结----集合的小小总结

热门文章

  1. Android自己定义Toast
  2. Android开发趣事记之周期性广告
  3. 揭秘传智播客班级毕业薪资超7k的内幕系列之四----汽车工的华丽转身
  4. Android+Jquery Mobile学习系列(6)-个人信息设置
  5. elasticsearch date_histogram
  6. hdoj--5612--Baby Ming and Matrix games(dfs)
  7. Hardwood Species(map)
  8. HttpClient短信接口
  9. Oracle 批量插入值
  10. Github标星4W+,热榜第一,如何用Python实现所有算法