我有一个(有点)简单的程序,它创建新线程,每个与套接字的连接一个:
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();
}
创建新线程之后,我将创建QThreads(TelnetConnection)的父级的所有子级的列表输出到qDebug,如下所示:
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) )
为什么看不到子线程?这是否意味着线程不再与父对象相关联?还是我在这里做错了...
最佳答案
这是否意味着线程不再与父对象相关联?
它可能从未关联过。构造线程时,需要将父级传递给它,但是您的TelnetConnection
似乎是错误的,因为它不希望有父级参数,或者您没有将内部传递的内容传递给基类。以下构造函数。
QThread(QObject * parent = 0)
否则您稍后必须调用setParent()。
void QObject::setParent(QObject * parent)
这将意味着thread.setParent(this);为您的代码,但我宁愿建议修复您的线程类构造函数或对其的调用。
或者,您也可以为TelnetConnection显式设置子项,但如果可能的话,我建议适当的构造。
关于c++ - QObject:findChildren和QThread,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19193882/