0

我有一个(有点)简单的程序,可以创建新线程,每个连接一个套接字:

void TelnetServer::incomingConnection(qintptr socketDescriptor)
{
    TelnetConnection *thread = new TelnetConnection(socketDescriptor);
    connect(thread, SIGNAL(shutdownRequested()), m_controller, SLOT(shutdown()));
    connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
    thread->start();
}

创建新线程后,我向 qDebug 输出创建 QThreads (TelnetConnection) 的父级的所有子级的列表,如下所示:

QList<QObject*> activeTelnetConnections = m_telnetserver->findChildren <QObject *> (); // Find all QThreads that children of telnetserver
qDebug() << "Children: " << activeTelnetConnections;

由于我的 QThreads 从 Qobject 下降,我希望看到 QThreads 的列表等等。但是,我找不到 Qthreads!这就是我所看到的:

Children:  (QNativeSocketEngine(0x7eb880) ,  QSocketNotifier(0x7ea5f0) ) 

为什么我看不到子线程?这是否意味着线程不再与父对象关联?或者我在这里做错了什么......

4

1 回答 1

1

这是否意味着线程不再与父对象关联?

它可能从未关联过。当您构造线程时,您需要将父级传递给它,但是您TelnetConnection似乎错了,因为它不需要父级参数,或者您没有将内部传递的内容进一步传递给具有以下构造函数的基类。

QThread(QObject * parent = 0)

或者您必须稍后调用 setParent() 。

void QObject::setParent(QObject * parent)

这意味着 thread.setParent(this); 对于您的代码,但我宁愿建议修复您的线程类构造函数或它的调用。

或者,您也可以为 TelnetConnection 显式设置子项,但如果可能的话,我会建议正确的构造。

于 2013-10-05T04:20:40.120 回答