c++中的Posix线程

Posted

技术标签:

【中文标题】c++中的Posix线程【英文标题】:Posix Threads in c++ 【发布时间】:2009-02-24 03:32:03 【问题描述】:

如何在linux c++中实现posix线程。smme程序保存为“.c并使用c编译器运行是可以的。但是在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*)â

【问题讨论】:

既然您是 Stack Overflow 的新手,请不要忘记“接受”最有帮助的答案(点击答案左侧的绿色复选标记)。 【参考方案1】:

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

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

您的函数声明如下:

void *packetreadertask();

它必须在哪里:

void *packetreadertask(void *);

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于c++中的Posix线程的主要内容,如果未能解决你的问题,请参考以下文章

C++封装POSIX 线程库线程的封装

如何在 C++ 中暂停和恢复 POSIX 线程?

linux 平台上 C# 中的自定义 posix 信号不起作用

在 Win32/MFC 和 POSIX 中,线程会自行清理吗?

Linux C++ pthread是什么缩写?(POSIX Threads)<pthread.h>

在 GPU 上启动多个 POSIX C++ 代码副本