我可以删除此警告,请在以下几点提出建议。
QSocketNotifier: socket notifiers cannot be enabled from another thread
每当新请求到达QTcpServer时,我都会创建新对象 - xxx
。然后,该对象为此套接字创建线程。发送接收数据
yyy对象的dowork_socket()函数。在dowork_socket()函数里面我发出信号signalTcpSocketWriteData()来从socket发送数据。
为新套接字创建线程的对象 - 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连接到slot 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>
是否会导致某些关键部分问题或事件排队等待不会同时执行?
请就这两点提出建议。
答案 0 :(得分:0)