2

如何在linux c++中实现posix线程。保存为“.c并使用c编译器运行的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:在成员函数âint cooperbussman::startlistenthread()â中:
cooperbussman.cpp:76: 错误:从 'void* (*)()' 到 'void* (*)(void*)' 的无效转换
cooperbussman.cpp:76: 错误: 初始化参数 3 âint pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)â
4

3 回答 3

5

您的packetreadertask函数必须是一个将单个void *作为参数的函数。这是重要的错误消息:

cooperbussman.cpp:76: 错误:从 'void* (*)()' 到 'void* (*)(void*)' 的无效转换

您的函数声明如下:

void *packetreadertask();

它必须在哪里:

void *packetreadertask(void *);
于 2009-02-24T03:50:07.693 回答
4

您可能会考虑使用 Boost.Threads。它在支持它的平台上通过 pthread 为您提供了 C++ 中的一些简单语义。

但是....没有理由不能在 C++ 程序中使用 pthread。您的错误可能是由于符号修改造成的,但如果不查看您的代码或至少您的编译器输出,我们无法更准确地帮助您。

于 2009-02-24T03:34:36.683 回答
2

在使用 g++ 时使用 -lpthreads,就像使用 gcc 一样。只要您不尝试将非静态成员函数指针用作线程,那么 pthreads 应该可以在 C++ 中正常工作。

于 2009-02-24T03:37:34.320 回答