Не делай этого.Используйте boost::thread
.
С помощью boost::thread
вы можете запускать темы с любым функтором подписи void()
, поэтому вы можете использовать std::mem_fun
и std::bind1st
, как в
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));
РЕДАКТИРОВАТЬ: Если вы действительно хотите абстрагировать потоки 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
является переносимым, гибким ипрост в использовании.