#include <list> #include <iostream> #include <pthread.h> #include <functional> class Runner { int id_; pthread_t thread_; public: Runner(int id): id_(id) { pthread_create(&thread_, NULL, reinterpret_cast<void* (*) (void*)>(&Runner::start_runner), reinterpret_cast<void*>(this)); pthread_join(thread_, NULL); } void start() { std::cout << "My id is " << id_ << std::endl; } static void* start_runner(void* runner) { reinterpret_cast<Runner*>(runner)->start(); } }; class Manager { typedef std::list<Runner> RunnerList; RunnerList runner_list_; public: Manager() { // } void add_runner() { runner_list_.push_back(Runner(runner_list_.size())); } void wait() { } }; int main(int argc, char **argv) { Manager manager; manager.add_runner(); manager.add_runner(); manager.add_runner(); return 0; }