1

Aイベントイニシエータ(ネットワーク/GUI)であるスレッドがあります。Bいくつかの関数で実行され、呼び出しrun()時に更新されるスレッド内のエンジンがありますupdate()。そのような構造の上にイベントをどのように実装するのだろうか。ここでの問題は、次のようなものを取得することです

  • イベントごとのミューテックス
  • イベントごとのベクトル
  • イベントごとに 2 つの関数 - 1 つはベクトルを 1 項目ずつ埋め、もう 1 つはベクトルを空にして新しいデータをエンジンに挿入します。

だから私はイベントごとにこのような疑似コードを持っています:

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