Потоки Posix в С++

Как реализовать потоки posix в linux С++. Программа smme, сохраненная как ".c и запущенная с использованием компилятора c, в порядке. но в С++ она дает ошибку..

Я думаю, что допустил ошибку при компиляции, есть ли какой-либо тег, который нужно включить, например "-lpthread" для С++

Может ли кто-нибудь отправить действительный код...?

Собственно это мой код

int cooperbussman :: startlistenthread()
{
        if(pthread_create(&m_thread,0,&packetreadertask,0)<0)
        {
                cout<<"Unable to create the thread Startlistenthread\n";
                return -1;
        }
        return 1;

и ошибка, которую я получаю,

cooperbussman.cpp: In member function âint cooperbussman::startlistenthread()â:
cooperbussman.cpp:76: error: invalid conversion from âvoid* (*)()â to âvoid* (*)(void*)â
cooperbussman.cpp:76: error:   initializing argument 3 of âint pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)â

person Chaithra    schedule 24.02.2009    source источник
comment
Поскольку вы новичок в Stack Overflow, не забудьте принять наиболее полезный ответ (щелкните зеленую галочку слева от ответа).   -  person Greg Hewgill    schedule 24.02.2009


Ответы (3)


Ваша функция packetreadertask должна быть функцией, которая принимает один void * в качестве параметра. Это важное сообщение об ошибке:

cooperbussman.cpp:76: error: invalid conversion from âvoid* (*)()â to âvoid* (*)(void*)â

Ваша функция объявлена ​​примерно так:

void *packetreadertask();

где должно быть:

void *packetreadertask(void *);
person Greg Hewgill    schedule 24.02.2009

Вы можете изучить использование Boost.Threads. Он дает вам простую семантику в C++ по сравнению с pthreads на платформах, которые его поддерживают.

Но... нет никаких причин, по которым вы не можете использовать pthreads в программе на C++. Ваши ошибки могут быть вызваны искажением символов, но у нас нет возможности помочь вам более точно, не видя ваш код или, по крайней мере, вывод вашего компилятора.

person Ben Collins    schedule 24.02.2009

Вы используете -lpthreads при использовании g++ так же, как и с gcc. Пока вы не пытаетесь использовать нестатический указатель функции-члена в качестве потока, pthreads должен прекрасно работать с C++.

person Judge Maygarden    schedule 24.02.2009