不要這樣做。使用boost::thread
。
隨着boost::thread
你可以用簽名void()
的任何仿函數啓動線程,這樣你就可以在
struct MyAwesomeThread
{
void operator()()
{
// Do something with the data
}
// Add constructors, and perhaps a way to get
// a result back
private:
// some data here
};
MyAwesomeThread t(parameters)
boost::thread(std::bind1st(std::mem_fun_ref(&t::operator()), t));
編輯使用std::mem_fun
和std::bind1st
,這樣的:如果你真的想抽象POSIX線程(它並不難) ,你可以做(我離開你的pthread_attr的初始化)
class thread
{
virtual void run() = 0; // private method
static void run_thread_(void* ptr)
{
reinterpret_cast<thread*>(ptr)->run();
}
pthread_t thread_;
pthread_attr_t attr_;
public:
void launch()
{
pthread_create(&thread_, &attr_, &::run_thread_, reinterpret_cast<void*>(this));
}
};
但boost::thread
便攜,靈活,使用起來非常簡單。
它已經完成。請參閱Boost :: thread。如果這只是一個練習搜索stackoverflow更多。 PS。不,您可以使用任何C++功能,回調必須是外部「C」功能。但是從那裏你可以撥打任何東西。 – 2010-12-21 21:30:09