【发布时间】:2013-11-22 11:12:31
【问题描述】:
我可以删除这个警告,请在以下几点提出建议。
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> 它会导致一些关键部分问题或事件排队 &不会同时执行?
请就这两点提出建议。
【问题讨论】:
-
谁能在这个线程上提出建议?
标签: qt qtcpsocket