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();
}
}
それはとても悪いように見えます...そのような問題に対する共通の解決策があるのだろうか?さらに、このイベントをオブジェクト/クラスにする方法がわからず、作成とセットアップがさらに面倒になります...(