管理自己的boost::线程的Singleton对象
Singleton object that manages its own boost::thread
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和类内成员初始值设定项。
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何像Singleton一样使用一个类的多个对象
- 管理自己的boost::线程的Singleton对象
- 如何在不使用非构造函数的方法的情况下应用singleton设计模式来返回类对象
- 可以使类名和对象名相同服务于singleton的机制