метод pthreads с объектами - PullRequest
       6

метод pthreads с объектами

1 голос
/ 24 апреля 2011

У меня небольшая проблема в моем текущем проекте, потому что я хочу использовать метод объектов при создании моей темы. Я понял, что это невозможно без объявления этого метода как статического. Есть идеи?

  public:
        CModelisation (int argc, char **argv, char[]);
    ~CModelisation ();

    void Init ();
    void *RunMainLoop (void* args);
};

CModelisation.cpp

void *CModelisation::RunMainLoop (void* args)
{
    glutDisplayFunc(Display);
    glutIdleFunc(Display);
    glutReshapeFunc(Redisplay);
    glutMotionFunc(Mouse);
    glutKeyboardFunc(Keyboard);
    glutMainLoop();
    return args;
}

Главная

    threads[1] = new CThread();
    threads[1]->exec(Model->RunMainLoop,(void*)1);

THX!

Ответы [ 2 ]

2 голосов
/ 24 апреля 2011

Я считаю, что обычной практикой является создание функции-обертки для любого метода потока:

struct Foo {

    void someMethod() {
        // ... the actual method ...
    }
    static void* someMethodWrap(void* arg) {
        ((Foo*) arg)->someMethod();
        return 0;
    }

    void callSomeMethodInOtherThread() {
        pthread_create(thread, attr, someMethodWrap, this);
    }
};

Передача дополнительных параметров требует немного больше усилий, но это общая идея.

К счастью, std::thread из следующего стандарта делает нашу жизнь намного проще ... но это еще впереди.

1 голос
/ 24 апреля 2011

Общий способ - добавить статический метод к вашему объекту, который получает экземпляр в качестве своего параметра.Затем вы можете легко вызывать любой метод-член.

Хороший пример можно найти здесь: Функция pthread из класса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...