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线程的主要内容,如果未能解决你的问题,请参考以下文章
linux 平台上 C# 中的自定义 posix 信号不起作用
在 Win32/MFC 和 POSIX 中,线程会自行清理吗?