1

所以我有线程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();
    }
}

看起来很糟糕......我想知道这些问题是否有共同的解决方案?此外,我不知道如何将这个事件变成对象/类,而不是让它的创建和设置更加混乱......(

4

0 回答 0