Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 检查有效线程_C++_Multithreading_Boost - Fatal编程技术网

C++ 检查有效线程

C++ 检查有效线程,c++,multithreading,boost,C++,Multithreading,Boost,如果您有一个已保存的线程id(使用boost::thread::get_id()函数获得),如何检查该线程当前是否正在运行?如果这有帮助,则不知道,但是如果存储指向boost::thread的指针,则可以查询?如果这有帮助,则不知道,但是如果存储指向boost::thread的指针,您可以查询?您不能这样做,至少不能通过便携方式 您需要设置一个共享变量,线程在结束前写入该变量。其他线程可以读取该变量以确定目标线程的状态。您需要将此变量与原子或互斥体同步。您不能这样做,至少不能以可移植的方式进行

如果您有一个已保存的线程id(使用boost::thread::get_id()函数获得),如何检查该线程当前是否正在运行?

如果这有帮助,则不知道,但是如果存储指向boost::thread的指针,则可以查询?

如果这有帮助,则不知道,但是如果存储指向boost::thread的指针,您可以查询?

您不能这样做,至少不能通过便携方式


您需要设置一个共享变量,线程在结束前写入该变量。其他线程可以读取该变量以确定目标线程的状态。您需要将此变量与原子或互斥体同步。

您不能这样做,至少不能以可移植的方式进行


您需要设置一个共享变量,线程在结束前写入该变量。其他线程可以读取该变量以确定目标线程的状态。您需要将此变量与atomics或互斥体同步。

您对“当前运行”的定义是什么?您想通过编程或工具进行同步吗?我是boost新手,所以有时我甚至不知道该问什么问题。“运行”是指具有特定id的线程是否已完成其处理(例如,如果您向其传递一个函数-一旦该函数退出)。我希望这个答案对你的问题有意义。我可能错过了什么。我希望能够以编程方式保存一个ID(因为我可以从线程中获取该ID),然后在稍后的某个时间检查该ID以查看线程是否已完成。下面的其他答案假设我已经有了一个句柄(我没有)。你对“当前运行”的定义是什么?你想通过编程或工具来实现它吗?我是boost新手,所以有时候我甚至不知道该问什么问题。“运行”是指具有特定id的线程是否已完成其处理(例如,如果您向其传递一个函数-一旦该函数退出)。我希望这个答案对你的问题有意义。我可能错过了什么。我希望能够以编程方式保存一个ID(因为我可以从线程中获取该ID),然后在稍后的某个时间检查该ID以查看线程是否已完成。下面的其他答案假设我已经有了一个句柄(我没有),我想我正试图从面向对象的角度做一些我不应该做的事情。我试图从一个线程(不是主线程)中访问有关其他线程的信息,这似乎不明智。其他答案假设我有一个线程句柄(请参阅我上面的评论)。您所能做的就是将一个线程::id与另一个线程进行比较。通过与本地静态线程::id进行比较,它主要用于检查函数是否在一行中运行同一线程两次。但是,它可以创建映射,并让线程使用其当前状态(正在运行,已完成)更新映射。但是请注意,在一个分离的线程完成运行之后,在一个线程被连接之后,它的thread::id可能会被另一个线程再次使用。我想我正在尝试做一些从面向对象的角度看不应该做的事情。我试图从一个线程(不是主线程)中访问有关其他线程的信息,这似乎不明智。其他答案假设我有一个线程句柄(请参阅我上面的评论)。您所能做的就是将一个线程::id与另一个线程进行比较。通过与本地静态线程::id进行比较,它主要用于检查函数是否在一行中运行同一线程两次。但是,它可以创建映射,并让线程使用其当前状态(正在运行,已完成)更新映射。但是请注意,在分离的线程完成运行后,以及在连接线程后,其thread::id可能会被另一个线程再次使用。
if (thread->joinable() && ! thread->timed_join(**zero_time here**)) {
  /* still running */
} else {
  /* not running */
}