如何将类中的函数放入线程中? (使用 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 在单独的线程中运行它?

qtchartsetreverse卡顿

在 boost.python 中;如何公开包含在另一个类中的类(通过组合)?

在 boost.python 中;如何公开包含在另一个类中的类(通过组合)?

Boost::Variant 和其中的 function_types:如何将函数放入 Boost::variant?

C ++ 0x中的线程析构函数与boost