如果从非Qt线程
调用QThread::getCurrentThread()
,我将得到什么?
谢谢!
如果从非Qt线程
调用QThread::getCurrentThread()
,我将得到什么?
谢谢!
QThread
只是一个包装器,背后它使用本机线程。
QThread::currentThread
如果尚不存在,则创建并初始化Q(Adopted)Thread
实例。
在Unix系统中,它使用pthread
。
#include <iostream>
#include <thread>
#include <pthread.h>
#include <QThread>
#include <QDebug>
void run() {
QThread *thread = QThread::currentThread();
qDebug() << thread;
std::cout << QThread::currentThreadId() << std::endl;
std::cout << std::this_thread::get_id() << std::endl;
std::cout << pthread_self() << std::endl;
thread->sleep(1);
std::cout << "finished\n";
}
int main() {
std::thread t1(run);
t1.join();
}
输出:
QThread(0x7fce51410fd0)
0x10edb6000
0x10edb6000
0x10edb6000
finished
我看到在这里有Qt应用程序主线程的初始化:there
data->threadId = (Qt::HANDLE)pthread_self();
if (!QCoreApplicationPrivate::theMainThread)
QCoreApplicationPrivate::theMainThread = data->thread;
因此可能会有一些副作用。
我建议不要将QThread与非Qt线程混合使用。
QThread
创建线程,然后使用this_thread::get_id()
获取ID。 - iammilind