1

我知道标题听起来很奇怪,所以让我解释一下。我有一个变量bob,它是一个boost::thread::native_handle_type并分配了一个本机句柄。现在我想检查当前运行的进程是否与分配给 bob 的进程相同。我不负责程序的设计,所以不幸的是,检查这种比较的情况是不可避免的,因为这是一个相当大的项目。

无论如何,所以我正在寻找这样的东西:

boost::this_thread::native_handle() == bob或者
boost::this_thread::get_id() == bob.get_id()

这有可能吗?非常感谢!

4

3 回答 3

0

两者是等价的,但是 == 和 != 运算符被标记为“向后兼容”,这意味着您不应该使用它们

// backwards compatibility
bool operator==(const thread& other) const;
bool operator!=(const thread& other) const;

这些运算符的实现表明它们使用ID进行比较:

inline bool thread::operator==(const thread& other) const
{
    return get_id()==other.get_id();
}

inline bool thread::operator!=(const thread& other) const
{
    return get_id()!=other.get_id();
}
于 2013-09-02T20:13:32.760 回答
0

是的,这是可能的。虽然我认为你在这里误解了:

现在我想检查当前运行的进程是否与分配给 bob 的进程相同

比较线程ID。

在 Windows 上使用本机句柄:GetThreadId 在 mac 和 posix 上,我认为你有一个pthread_t * as 句柄。此类型是线程的 id。您可以将其与pthraed_equal我认为看到的here进行比较

因此,您的回答是将本机 id 类型与平台相关代码进行比较。

事实上,主要问题是两个平台上的本机 id 类型不同。

于 2013-09-02T17:14:44.187 回答
0

不完全的。您无法获取当前正在运行的线程的本机句柄,并且 Boost.Thread 不允许您根据本机句柄获取 ID。

要么以某种方式更改bob以使其thread::id可用,要么回退到本机代码。

于 2013-09-02T17:39:09.390 回答