Я искал ответ, если есть какая-то разница между этими двумя функциями, кроме константности первого:QThread :: currentThread() против QObject :: нити()
QThread * QObject::thread() const
QThread * QThread::currentThread()
Я искал ответ, если есть какая-то разница между этими двумя функциями, кроме константности первого:QThread :: currentThread() против QObject :: нити()
QThread * QObject::thread() const
QThread * QThread::currentThread()
Они сильно отличаются.
QThread * QObject::thread() const
возвращает нить, в которой живет конкретный QObject
.
QThread * QThread::currentThread()
Возвращает указатель на 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)
Они не то же самое, хотя они могут вернуть тот же результат.
первый один возвращает поток, что QObject живет.
второй один возвращает исполняемую в данный момент поток.
Они делают две разные вещи. QThread::currentThread()
- статическая функция, возвращающая указатель на поток, из которого он вызван, т.е. текущая нить.
QObject::thread()
возвращает указатель на поток, в котором этот объект живет.