C ++中的事件实现兼顾性能

时间:2019-01-26 08:31:19

标签: c++ events memory-management event-handling rule-engine

我正在创建一个管理事件的引擎,并根据特定的输入规则执行不同的操作。

假设我有元素A,当事件到达时,元素A会产生一个值x。产生时,它将事件发送给系统,通知其他元素。收到通知后,这些元素将从事件消息中获取发送者的ID,并直接从发送者而不是从事件对象获取值。

您对性能有何看法?

另一种选择是将Element生产者的计算值存储到Event中,但是由于我想避免多次调用new运算符,因此我认为这不是可行的解决方案。

即使使用类似的东西

struct Event
{
int idProducer;
MyEnumType type;
union Storage
  {
  uint32_t intElement;
  double doubleElement;
  void* voidElement;
  MyValueBase* baseElement;
  };
};

如果大多数生产者都使用new运算符,那么它将对我不起作用。

第一种方法的缺点可能是可能需要使用额外的互斥锁。

您会选择哪种解决方案?

[edit]我将根据要求提供更多详细信息:

会有更多线程

如果将解决方案与Executer元素中的计算值一起使用,我想到的结构是:

// This is not the actual code but just a semplification: 
struct ExecuterBase
  {
  virtual void manageEvent(const Event& event)=0;
  virtual void addEvent(const Event& event)
    {
    eventQueue.push(event);
    }

  SharedState* state_;
  int idElement_;
  };

template<class ReturnType>
struct ExecuterBaseR : ExecuterBase 
{ 
virtual ReturnType result() = 0;
};


struct ConcreteExecuter : ExecuterBaseR<double>
{
void manageEvent(const Event& e) override
 {
 result_ = /* something computed*/;
 }

 double result() {return result_;}
};

0 个答案:

没有答案