如何将类中的函数放入线程中? (使用 Boost 的 C++)
Posted
技术标签:
【中文标题】如何将类中的函数放入线程中? (使用 Boost 的 C++)【英文标题】:How to put function inside a class into thread? (C++ using Boost) 【发布时间】:2010-11-08 10:07:31 【问题描述】:我有一个类,其中包含printf("hello main thread");
和printf("hello thread created inside class");
等一些函数。每个理论上都可以使用类变量。如何将其中一个功能放入线程中? (使用 Boost 库的 C++)
【问题讨论】:
我一头雾水,你说的理论上每个都可以使用类变量是什么意思? @Space_C0wb0y:我猜他的意思是“方法” 什么是将函数放入线程中? @Space_C0wb0y:如果我不得不猜测,我会说这些(成员)函数不可能是static
,因为它们使用非静态成员。
【参考方案1】:
看看boost::bind
。
class Class
public:
void method(const char*);
;
// instance is an instance of Class
boost::thread(boost::bind(&Class::method, &instance, "hello main thread"));
应该这样做。
但是,请注意 boost::thread
有一个已经执行此操作的构造函数:请参阅 this link。
所以你基本上可以这样做:
boost::thread(&Class::method, &instance, "hello main thread");
【讨论】:
【参考方案2】:您可以为此使用Boost.Bind
。
class Foo
public:
void someMethod(const std::string & text);
;
Foo foo;
boost::thread(boost::bind(&Foo::someMethod, &foo, "Text"));
【讨论】:
【参考方案3】:typedef boost::shared_ptr<boost::thread> thread_ptr;
class your_class : boost::noncopyable
public:
void run();
void join();
void signal_stop();
private:
void your_thread_func();
thread_ptr thread_;
;
void your_class::run()
thread_ = thread_ptr(new boost::thread(boost::bind<void>(&your_class::your_thread_func, this)));
void your_class::join()
if (thread_)
thread_->join();
【讨论】:
以上是关于如何将类中的函数放入线程中? (使用 Boost 的 C++)的主要内容,如果未能解决你的问题,请参考以下文章
有一个返回 int 的函数,我如何使用 boost 在单独的线程中运行它?
在 boost.python 中;如何公开包含在另一个类中的类(通过组合)?
在 boost.python 中;如何公开包含在另一个类中的类(通过组合)?