【发布时间】:2010-12-13 05:17:45
【问题描述】:
我正在尝试将一些 Windows 代码移植到 Linux,最好是通过与平台无关的库(例如 boost),但是我不确定如何移植这段事件代码。
这段代码涉及两个线程(我们称它们为 A 和 B)。 A 想做一些只有 B 可以做的事情,所以它给 B 发送了一条消息,然后等待 B 说它完成了。在 Windows 中,这看起来像:
void foo();//thread a calls this
void bar(HANDLE evt);
void foo()
{
HANDLE evt = CreateEvent(0,FALSE,FALSE,0);
bCall(boost::bind(&bar, evt));
WaitForSingleObject(evt,INFINITE);
CloseHandle(evt);
}
void bar(HANDLE evt)
{
doSomething();
SetEvent(evt);
}
我查看了 boost::thread 库,但它似乎没有任何功能,我可以看到的关闭是 boost::condition_variable,但它似乎是与互斥锁结合使用的意思,即这里不是这样。
【问题讨论】:
-
我认为您的 Windows 特定代码在后台使用了互斥锁。它只是将其抽象出来。
-
this question 也有很好的信息
标签: c++ windows multithreading boost cross-platform