CuxueCo()线程C++之前的更新联接()

CuxueCo()线程C++之前的更新联接(),c++,multithreading,thread-safety,C++,Multithreading,Thread Safety,如何像这样管理线程: thread th(foo); while(th.joinable()) { // thread foo is active; // some printing from foo function for example } th.join(); 这个while是无限的,因为th.joinable始终为真且不更新。什么原因以及如何解决这个问题?正如Joachim所指出的,只要线程还没有被连接或默认构造,joinable就是正确的 我从您的评论中了解到您的需求,

如何像这样管理线程:

thread th(foo);

while(th.joinable())
{
  // thread foo is active;
  // some printing from foo function for example
}

th.join();

这个while是无限的,因为th.joinable始终为真且不更新。什么原因以及如何解决这个问题?

正如Joachim所指出的,只要线程还没有被连接或默认构造,joinable就是正确的


我从您的评论中了解到您的需求,您可以在不使用while循环的情况下调用th.join。这会一直阻止,直到foo完成。

请参见例如中的定义。My function foo会更改某些静态变量的值。当线程处于活动状态时,我必须打印此变量,但我无法理解如何从main中查找您的线程是否仍处于活动状态或已完成。在这种情况下,您应该使用布尔标志指示线程是否仍在运行。在启动工作线程之前,在主线程中将其设置为true,并在工作线程函数中将其重置为最后一个命令。