先感谢各位爱心人士帮忙参与讨论
问题。
先介绍一下问题背景:
1. 项目是使用Qt使用Tcp网络接受
数据,而且是实时接收数据,每秒钟接收一次,数据还有点多;
2. 想使用
线程中来接收数据,使用的时候是用moveToThread的方法使用线程;
3. 主线程中使用两个TCP端口,一个是发送命令,一个接收数据端口;
为题1:发送命令端口封装在一个类中,不能使用moveToThread到线程中,使用就会出现以下错误:QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread
QSocketNotifier: Invalid socket 14 and type 'Read', disabling...
问题2:将发送命令端口放在主线程中运行,将接收数据端口moveToThread到线程中去,可以使用,但是关闭时出现以下错误QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread
程序异常结束。
问题3:使用线程后关闭程序时最后会出现一个程序异常结束- // 关闭程序事件
- void PortableCollector::closeEvent(QCloseEvent *e)
- {
- if(RcvCmd) { // 发送命令类
- RcvCmd->CloseScoket();
- RcvCmd->deleteLater();;
- RcvCmd = NULL;
- }
- if(Data) { // 接收数据线程
- Data->CloseScoket();
- Data->deleteLater();
- Data = NULL;
- }
- if(ParseDT) { // 解析数据线程
- ParseDT->deleteLater();
- ParseDT = NULL;
- }
- if(JThread) { // 线程池
- JThread->exit();
- JThread->wait();
- JThread->deleteLater();
- JThread = NULL;
- }
- }