来自非 Qt 线程的 QThread::getCurrentThread()
Posted
技术标签:
【中文标题】来自非 Qt 线程的 QThread::getCurrentThread()【英文标题】:QThread::getCurrentThread() from non-Qt thread 【发布时间】:2013-04-25 05:56:03 【问题描述】:如果从non-Qt thread
调用,我将从QThread::getCurrentThread()
得到什么?
谢谢!
【问题讨论】:
何不试试看? 你的意思是QThread::currentThread()吗?还有一个问题:你为什么要这样做? 这可能是未定义的行为。 【参考方案1】:QThread
只是一个包装器,在后台它使用本地线程。
QThread::currentThread
创建并初始化一个 Q(Adopted)Thread
实例(如果它尚不存在)。
对于 unix,它使用pthread
s。
#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
我看到there是Qt应用主线程的初始化:
data->threadId = (Qt::HANDLE)pthread_self();
if (!QCoreApplicationPrivate::theMainThread)
QCoreApplicationPrivate::theMainThread = data->thread;
所以可能会有一些副作用。
我建议不要将 QThread 与非 Qt 线程混合使用。
【讨论】:
可能有什么副作用?为什么不建议混合使用? 反之亦然兼容吗?即使用QThread
s 创建一个线程,然后使用this_thread::get_id()
获取id。以上是关于来自非 Qt 线程的 QThread::getCurrentThread()的主要内容,如果未能解决你的问题,请参考以下文章
Qt 4.8:来自不同线程的两个信号和一个插槽之间的连接行为
Qt笔记-QTcpSocket跨线程调用(官方推荐方法,非百度烂大街方法)
从来自 QTcpSocket 的数据流中连续运行复杂算法的最佳 Qt 线程解决方案是啥?