存储完整的通用函数调用以便稍后播放?

时间:2011-04-25 15:02:53

标签: c++ multithreading boost boost-bind

目前我正在通过我在下面介绍的函数 MyClass :: Enable 存储函数调用。从某种意义上说,它是通用的,我可以通过循环遍历 commanList 而不再提供任何函数参数,从而在消费者线程上播放该函数。

然而,通过快速性能检查,与使用函数查找表(打破通用部分)并存储函数参数以及函数查找位置相比,此方法在处理时间上花费了2倍的时间来完成存储的函数。 (道歉,如果这没有意义:它本质上是一个功能记录器。)

是否有一个性能更友好的std :: tr1 :: bind [boost :: bind]版本,还是有更好的方式以通用方式记录函数调用并稍后播放?

class CVertexFormatGLPtr
{
   void Enable(size_t a, size_t b);
   void Disable();
};

class MyClass
{
public:
   typedef std::function<void ()> command;
   typedef std::list<command> commandList;

   // This is a typedef of CVertexFormatPtr & CVertexFormatGLPtr
   VertexFormatMap& m_vertexFormats;

   void Enable(const CVertexFormatPtr& pVFormat, size_t a, size_t b)
   {
      // search to find if vertex buffer is active
      auto itor = m_vertexFormats.find(pVFormat);
      CVertexFormatGLPtr pVFormatGL = CVertexFormatGLPtr();
      if ( itor != m_vertexFormats.end() )
      {
         pVFormatGL = (*itor).second;
      }

      std::function<void()> zeroArg = std::bind(&CVertexFormatGL::Enable, pVFormatGL, a, b);
      m_renderCommands.push_back(zeroArg); 
   }

};

0 个答案:

没有答案