• 3406阅读
  • 1回复

QTCP多线程问题 [复制链接]

上一主题 下一主题
离线wenson1
 

只看楼主 倒序阅读 楼主  发表于: 2013-07-04
先贴代码
void TERMINAL_THREAD::run(){      
tcpsocket = new QTcpSocket(this);      
if(!tcpsocket->setSocketDescriptor(socketDescriptor))      
{          
qDebug()<<"terminal tcpsocket error";          
return;    
}      
else      
{        
qDebug()<<"terminal tcpsocket ok";    
}    
qDebug()<<socketDescriptor;

     char buff12[1]={0};
   buff12[0]=0x31;    
this->tcpsocket->write(buff12,1);
    terminal_ip=tcpsocket->peerAddress().toString();    
qDebug()<<"ip"<<terminal_ip;    
      connect(tcpsocket,SIGNAL(readyRead()),this,SLOT(read_tcp()),Qt::DirectConnection);      
connect(w,SIGNAL(read_server_sig(QString,QString)),this,SLOT(read_server_slot(QString,QString)));      
connect(tcpsocket,SIGNAL(disconnected()),this,SLOT(close_connect()));      
connect(tcpsocket,SIGNAL(readChannelFinished()),this,SLOT(close_connect()));    
//connect(w,SIGNAL(write(QString)),this,SLOT(write_tcp(QString)),Qt::DirectConnection);    
// connect(send_write,SIGNAL(write_send(QString)),this,SLOT(write_tcp(QString)),Qt::DirectConnection);      
connect(this,SIGNAL(write(QString)),this,SLOT(write_slot(QString)),Qt::DirectConnection);      
exec();}
void TERMINAL_THREAD::write_slot(QString str){    
tcpsocket->write(str.toLocal8Bit(),str.length());}
TERMINAL_THREAD::~TERMINAL_THREAD()
{  
this->tcpsocket->deleteLater();
}
void TERMINAL_THREAD::close_connect(){
    this->exit();    
this->terminate();
}
void TERMINAL_THREAD::read_server_slot(QString tcp_ip, QString read_string)
{  
QString write_data="["+tcp_ip+"]"+read_string;    
this->tcpsocket->write(write_data.toLocal8Bit(),
write_data.length());
}
void TERMINAL_THREAD::write_tcp(QString str){  
write_string=str;    
istcpsock=true;  
this->tcpsocket->write(str.toLocal8Bit(),str.length());
}
void TERMINAL_THREAD::read_tcp(){  
QString read_string,ip_tcp;    
read_string=this->tcpsocket->readAll();  
QTcpSocket *tcpsock2 = tcpsocket;    
emit sig_read_tcp(tcpsocket->peerAddress().toString(),read_string);
}

在主线程里面发一个信号调用write_tcp,报QSocketNotifier: socket notifiers cannot be enabled from another thread

请问大神如何解决
离线XChinux

只看该作者 1楼 发表于: 2013-07-12
在不同的线程内,你需要将你的主线程的信号与write_tcp()在run()里连接上.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个