所以我有线程A
是事件发起者(网络/gui)。我在线程B
中有一个引擎,它在某些run()
函数中运行并随时更新update()
。我想知道如何在这种结构之上实现事件。这里的问题是我得到类似的东西
- 每个事件一个互斥锁
- 每个事件的向量
- 每个事件 2 个函数 - 一个用于逐项填充向量,一个用于清空向量并将新数据插入引擎。
所以我对每个事件都有这样的伪代码:
boost::mutex SomeEventMutex;
std::vector< T > SomeEventFrameData;
void ThreadASendsSomeEvent(T data)
{
boost::mutex::scoped_lock lock(SomeEventMutex);
SomeEventFrameData.push_back(data);
}
void ParseIncomeDartaFromSomeEvent()
{
boost::mutex::scoped_lock lock(SomeEventMutex);
BOOST_FOREACH(T dataItem, SomeEventFrameData)
{
// here can be some more complex operation with given data
engine->DoStuff(dataItem);
}
SomeEventFrameData.clear();
}
void run()
{
while(1){
// for each event type
ParseIncomeDartaFromSomeEvent();
//Engine Update
update();
}
}
看起来很糟糕......我想知道这些问题是否有共同的解决方案?此外,我不知道如何将这个事件变成对象/类,而不是让它的创建和设置更加混乱......(