8

c++11中是否有任何可靠的方法来检测当前线程是否是主线程?或者我是否必须手动保存主线程线程ID,std::this_thread::get_id()然后有一个这样的例程:

bool isMainThread()
{
    return theMainThreadIdISavedOnProgramStart == std::this_thread::get_id();
}

有没有一种通用的方法可以做到这一点?上述解决方案有效吗?

谢谢

4

1 回答 1

11

你说的主线程是什么意思?如果您的意思是执行的线程main(),那么您无法知道线程是否是主线程。您必须保存其 ID,稍后您可以使用保存的 ID 通过将其 ID 与保存的 ID 进行比较来了解当前线程是否是主线程(正如您在问题中所猜测的那样)。

再解释一下,线程没有层次结构,没有父线程,也没有子线程,即使一个线程创建了其他线程。操作系统不记得哪个线程由哪个线程创建。因此,所有线程对于操作系统和您的程序都是相同的。因此,您无法main通过检测当前线程是否是应用程序中所有其他线程的父级来推断线程。

于 2012-07-13T11:21:49.820 回答