Есть обёртка над pthread_create вида:
Код: Выделить всё
unsigned int startTh(pthread_t *thread, const pthread_attr_t *attr,
                    void *(*func)(void *), void *arg)
        {
            return pthread_create(thread, attr, func, arg);
        }Фукция, которая должна стартовать в потоке, со следующим прототипом - void *start(void *arg).
При таком прототипе компиляция заканчивается ошибкой:
Код: Выделить всё
stream.cpp: In constructor ‘Stream::Stream()’:
stream.cpp:47: error: no matching function for call to ‘Stream::startTh(pthread_t*, pthread_attr_t*, <unresolved overloaded function type>, int)’
thread.hpp:12: note: candidates are: unsigned int Thread::startTh(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)В случае, если я привожу прототип фукции к static void *start(void *arg), данной ошибке при компиляции не возникает.
Но в этом случае я не могу обратиться к необходимым мне переменным, ошибка приобретает вид:
Код: Выделить всё
stream.hpp:33: error: invalid use of member ‘Stream::imageWidth’ in static member function
stream.cpp:118: error: from this locationОписание класса:
Код: Выделить всё
class Stream : protected Thread {
    typedef struct source_buff_s {
        unsigned char *buff;
        unsigned int  size;
        char          *url;
        pthread_mutex_t mutex;
    } source_buff_t;
    bool is_meta;
    bool is_jpeg;
    unsigned int imageWidth;
    unsigned int imageHeight;
    source_buff_t m_jpeg;
    source_buff_t m_meta;
    pthread_t streamThread;
    pthread_attr_t attr;
    public:
        Stream();
        ~Stream(){}
    private:
        void *start(void *arg);Передать необходимые аргументы в фукцию через структуру нельзя, так как к ним необходим доступ другой фукции этого класса из другого потока.
Вопрос возник потому, что во всех примерах по работе с потоками, которые я нашёл, не используется указатель static для фукций.
Вопрос - как необхомо вызывать фукцию в потоке что бы она имела доступ, и могла оперировать, внешними переменными?
Использую gcc 4.2.0, если это имеет значение.
Спасибо.
