【问题标题】:Thread id in QtQt中的线程ID
【发布时间】:2010-10-31 14:22:13
【问题描述】:

如何在Qt的windows环境下使用qDebug()打印线程id。

【问题讨论】:

    标签: multithreading qt debugging


    【解决方案1】:

    我假设您想要当前执行线程的线程 ID(而不是特定 QThread 对象的线程 ID):

    qDebug() << QThread::currentThreadId();
    

    需要考虑的事项:该方法返回一个特定于平台的 id(检查docs)。在 Windows 中,您不能将此 id 与 Win32 API 函数一起使用,因为它返回的是伪 id 而不是真正的线程 id。

    如果您的应用程序只能在 Windows 中运行,并且您需要对线程 ID 做一些有意义的事情,那么最好使用 GetCurrentThreadId()

    【讨论】:

    • 这仍然正确吗?我看到 currentThreadId() 返回一个句柄(qt-project.org/doc/qt-4.8/qthread.html#currentThread),它可能在每次调用时都会有所不同。你不想用 QThread::currentThread() 代替,它是一个指向线程数据结构的指针吗?
    【解决方案2】:

    在 Windows 上,应用程序通常在您执行时从命令行“分离”。如果你添加

    win32:CONFIG+=console
    

    您的应用程序将阻止命令提示符,并打印 qDebug 语句。

    【讨论】:

      【解决方案3】:

      由于 QThread 的底层实现是 pthreads,因此您可以使用(我假设您想要一个可用的 ID)

      pthread_t = pthread_self();
      

      从正在执行的线程中。

      从 QThread::currentThreadId() 返回的值是不可移植的。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      相关资源
      最近更新 更多