QThread :: currentThread()vs QObject :: thread()

时间:2015-10-22 12:07:49

标签: c++ multithreading qt qthread qobject

如果这两个函数之间存在任何差异,除了第一个函数的常量之外,我正在寻找答案:

QThread * QObject::thread() const
QThread * QThread::currentThread()

3 个答案:

答案 0 :(得分:8)

他们完全不同。

QThread * QObject::thread() const返回特定QObject所在的主题。

QThread * QThread::currentThread()返回指向QThread的指针,该QThread管理当前正在执行的线程。

class MyClass : public QObject
{

};

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    MyClass * obj = new MyClass();
    QThread thread2;
    obj->moveToThread(&thread2);
    thread2.start();

    qDebug() << "The current thread is " << QThread::currentThread();
    qDebug() << "The thread2 address is " << &thread2;
    qDebug() << "The object is in thread " << obj->thread();

    return app.exec();
}

示例输出:

  

当前线程为QThread(0x1436b20)
  thread2地址是QThread(0x7fff29753a30)
  该对象位于线程QThread(0x7fff29753a30)

答案 1 :(得分:4)

他们做了两件不同的事情。 With btn .Placement = xlMove .OnAction = "ButtonRow" .Characters.Text = "Action!" .Left = ActiveCell.Left .Top = ActiveCell.Top ActiveSheet.Shapes(.Name).LockAspectRatio = msoTrue End With 是一个静态函数,它返回一个指向调用它的线程的指针,即。当前主题。

QThread::currentThread()返回指向此对象所在线程的指针。

答案 2 :(得分:1)

虽然它们可能会返回相同的结果,但它们并不相同。

第一个返回QObject所在的线程。

第二个返回当前正在执行的线程。