Вот пример конструкции, которая позволит обойти это:
/* pthr_tst.h */
#ifndef PTHR_TST_H
#define PTHR_TST_H
class PTHR_TST;
void *testThr(PTHR_TST * p);
class PTHR_TST {
    public:
       PTHR_TST();
       ~PTHR_TST();
       int createThreads();
    protected:
       friend void *testThr(PTHR_TST * p);
};
#endif
/* pthr_tst.cpp */
#include
#include "pthr_tst.h"
PTHR_TST::PTHR_TST() {}
PTHR_TST::~PTHR_TST() {}
void * testThr(PTHR_TST *p) {
    PTHR_TST * t = p;
    // t->someMethod();
    // someMethod() будет работать в потоке
    delete t;
    return 0;
}
int createThreads() {
    /* тоже хинт. g_tattr используется для задания
    максимального используемого объема памяти потоком */
    pthread_attr_t g_tattr;
    size_t ss=100*1024;
    pthread_attr_setstacksize(&g_tattr, ss);
    pthread_t testthr;
    pthread_create(&testthr, &g_tattr, (void *(*)(void*)) testThr, this);
}
Комментариев нет:
Отправить комментарий