#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;
}

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS