class MyClass { public: void start(); void run(); }; struct Runner { Runner(MyClass* b) : m_b(b) {} void operator () () { m_b->run(); } MyClass* m_b; }; void MyClass::start() { thread* th= new thread(Runner(this)); } void MyClass::run() { cerr << "I run" << endl; sleep(1); cerr << "I runned" << endl; } int main () { MyClass m; m.start(); sleep(60); cout << "exit" << endl; }