2010-11-08 31 views
0

我有一個類,有一些功能,如printf("hello main thread");printf("hello thread created inside class");。每個人都可以理論上使用類變量。如何將其中一個功能放入線程中? (C++使用Boost庫)如何將類內的函數放入線程中? (C++使用Boost)

+0

我很困惑,你是什麼意思*每個人都可以使用理論上類變量*? – 2010-11-08 10:16:00

+0

@ Space_C0wb0y:我想他的意思是一個「方法」 – ereOn 2010-11-08 10:43:52

+0

什麼是一個函數到線程完全? – valdo 2010-11-08 12:34:26

回答

1
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(); 
    } 
} 
2

您可以使用Boost.Bind

class Foo { 
public: 
    void someMethod(const std::string & text); 
}; 

Foo foo; 
boost::thread(boost::bind(&Foo::someMethod, &foo, "Text")); 
4

看看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"); 
相關問題