线程如何在加入之前运行循环?

时间:2015-11-04 12:19:06

标签: c++ multithreading c++11 stl

使用std::thread运行一个运行无限循环的方法,循环是否可以查询是否已请求加入线程...或者我是否需要手动添加“exitThread”标志?

换句话说,isJoined看起来像什么(未经测试的伪代码):

std::atomic<int> global_counter (0);

void Run()
{
  while(!isJoined())
  {
    doSomething();
    ++global_counter;
  }
}

int main()
{
  thread t(Run);
  Sleep(10000);
  t.join();
  cout << "Iterated " << global_counter << "times" << endl;
}

2 个答案:

答案 0 :(得分:8)

您要做的不仅是加入线程,还要发送消息。这两件事情是不同的,你需要做两件事。

要向线程发送消息,您使用条件变量发出信号。既然你知道你需要的东西的名字,你可以谷歌,你会发现很多很好的教程解释如何使用这个概念发信号,所以我觉得没有必要在这里详细说明。

答案 1 :(得分:-2)

使用变量表示退出:

volatile boolean request_exit = false;

在循环中测试变量:

while(!request_exit) { do work }

然后在join之前设置变量:

request_exit = true;
t.join();