管理自己的boost::线程的Singleton对象

Singleton object that manages its own boost::thread

本文关键字:Singleton 对象 线程 boost 管理 自己的      更新时间:2023-10-16

Singleton.h

class Singleton{
public:
 static Singleton &getInstance() {
      static Singleton instance;
      return instance;
 }
 void start();
 void run();
 void join();
private:
 Singleton();
 int a;
 boost::thread thread;
};

Singleton.cpp

Singleton()::Singleton:a(0){}
void Singleton::run(){ a=1; }
void Singleton::start(){ thread = boost::thread(&Singleton::run, this, NULL); }
void Singleton::join(){ thread.join(); }

main.cpp

Singleton::getInstance().start();
Singleton::getInstance().join();

我得到的错误是

/usr/include/boost/bind/bind.hpp:在"void"的实例化中boost::_bi::list2::operator();,int)[其中F=void(Singleton::)();A=boost::_bi::list0;A1=boost::_bi::value;A2=升压::_bi::value]':/usr/include/boost/bind_bind_template.hp:20:59:必需自'boost::_bi::bind_t::result_type boost::_blai::bind_t::operator()[其中R=void;F=void(Singleton::)();L=boost::_bi::list2,boost::_blai::value>;boost::_bi::bind_t::result_type=void]]/usr/include/boost/thread/detail/thread.hpp:117:必需自'void boost::detail::thread_data::run()[带F=boost::_bi::bind_t,boost::_blai::value>>]'Singleton.cpp:4:1:必需从这里

我被困在这里,不知道该怎么办,谢谢你的帮助。

鉴于您的帖子被标记为C++11,我可以自由使用它的功能。我已经实现了你的代码没有问题:

#include <thread>
class Singleton{
public:
   static Singleton &getInstance() 
   {
      static Singleton instance;
      return instance;
   }
   void start()
   {
      thread = std::thread(
         [this]() // lambda to call internal run method
         {
             run();
         });
   }
   void run()
   {
      a=1;
   }
   void join()
   {
      thread.join();
   }

private:
   Singleton() = default;
   int a = 0;
   std::thread thread;
};

实时演示

请注意,我使用了std::thread、默认构造函数、lambda和类内成员初始值设定项。