2011-04-07 87 views
0

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

+0

您对“当前运行”的定义是什么? – Bahbar 2011-04-07 16:23:59

+0

你想通过编程或者通过工具来完成吗? – karlphillip 2011-04-07 17:15:00

+0

我是新来的助手,所以有时我甚至不知道要问的正确问题。 “运行”是指具有特定id的线程是否已完成其处理(例如,如果您将该函数传递给函数 - 一旦该函数退出)。我希望这个答案对你的问题有意义。我可能错过了一些东西。我希望能够以编程方式保存一个ID(因为我可以从一个线程中获取该ID),然后稍后检查该ID以查看该线程是否已完成。下面的其他答案假设我已经有一个句柄(我不这样做)。 – tinc 2011-04-07 18:45:56

回答

1

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

1
if (thread->joinable() && ! thread->timed_join(**zero_time here**)) { 
    /* still running */ 
} else { 
    /* not running */ 
} 
1

你不能这样做,至少不能移动。

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

+0

我想我正在尝试做一些我不应该从面向对象的角度来做的事情。我试图从一个线程(不是主线程)中访问有关其他线程的信息,这看起来并不聪明。其他答案假设我有线程的句柄(请参阅上面的我的评论)。 – tinc 2011-04-07 18:47:05

+0

除了编程原理,thread :: id只是没有你要找的API。你所能做的只是比较一个线程:: id到另一个线程。通过与一个本地静态线程:: id进行比较,它主要用于检查一个函数是否连续两次运行相同的线程。但是可以创建一个映射,并让线程用它们当前的状态(正在运行,已完成)更新映射。但是请注意,在分离的线程运行完毕后,并且在线程连接后,其线程:: id可能会被另一个线程再次使用。 – 2011-04-07 20:58:36