【发布时间】:2014-02-26 17:36:53
【问题描述】:
我在linux上使用gcc4.7 c++和boost。
我有一个使用 boost::signals2 的 EventDispatcher 类,如下所示。 onUpdate()可以被多个线程调用
class EventDispather
{
public:
void subscribe(Listener l)
{
_signal.connect(l)
}
void onUpdate(Data data)
{
_signal(data);
}
private:
boost::signals2::signal<void (Data)> _signal;
};
现在我想在类中再添加一个信号来处理一些低优先级的侦听器。当 onUpdate() 执行时,它首先通知高优先级的侦听器。然后是应该在低优先级线程中调用低优先级的线程并立即返回。新代码如下:
class EventDispather
{
public:
void subscribe(Listener l, Priority priority=high)
{
if(priority == high)
{
_signal.connect(l);
}
else
{
_signalLowPriority.connect(l);
}
}
void onUpdate(Data data)
{
_signal(data);
//how to trigger _signalLowPriority in a low priority thread?
}
private:
boost::signals2::signal<void (Data)> _signal;
boost::signals2::signal<void (Data)> _signalLowPriority;
};
问题:
- 如何在低优先级线程中触发
_signalLowPriority()而不等待? - 另外,我不想在每次
onUpdate()执行时都创建一个新线程,而是重用一个线程......如何?
如果我的目标可以通过使用标准库和/或 boost 来完成,那就太好了,但如果真的有帮助,我可以使用任何其他库。
【问题讨论】:
-
如果
_signalLowPriority在上一次调用完成之前再次被调用怎么办? -
理想情况下,单个低优先级线程应该等到前一个 Data 对象的 _signalLowPriority() 调用完成,然后用新的 Data 对象调用 _signalLowPriority()。
标签: c++ multithreading boost