我可以删除此警告,请在以下几点提出建议。
QSocketNotifier: socket notifiers cannot be enabled from another thread
每当新请求来到 QTcpServer 时,我都会创建新对象—— xxx
。然后该对象为此套接字创建线程并在 yyy 对象的 dowork_socket() 函数中发送接收数据。在 dowork_socket() 函数中,我发出信号 signalTcpSocketWriteData() 以从套接字发送数据。
为新套接字创建线程的对象- xxx
(我没有粘贴完整代码):----
yyy * ptr;
QTcpSocket *m_pTcpSocket;
public slots:
void writeDataSlot( QByteArray data )
{
m_pTcpSocket->write( data );
m_pTcpSocket->flush();
}
移动线程的对象—— yyy
(我没有粘贴完整的代码):----
xxx *TcpSocketWrapper_ptr;
signals:
void signalTcpSocketWriteData( QByteArray);
public slots:
void dowork_socket();
在上面的对象 yyy 构造函数中,我将信号 signalTcpSocketWriteData 连接到插槽 writeDataSlot :---
connect(this, SIGNAL(signalTcpSocketWriteData( QByteArray)), TcpSocketWrapper_ptr, SLOT(writeDataSlot( QByteArray )), Qt::QueuedConnection );
对象yyy的dowork函数:--
void TcpSocketThreadObject::dowork_socket()
{
QByteArray block;
block.append(" \n hi again .. !!!");
emit signalTcpSocketWriteData(block);
}
我可以通过上述方法完全成功发送数据并且上述警告已被删除。
1>
现在我的问题是假设创建了两个线程并且两个线程同时发出信号,那么运行插槽会不会发生冲突?
2>
它会导致一些关键部分问题或事件排队并且不会同时执行吗?
请就这两点提出建议。