在c++编译环境下编译pthread_create会报错,出现问题的主要原因就是pthread_create的第3个参数——void*(void*)这个回调函数。
下面给出解决方法:
将要调用的函数改成静态函数或全局函数:
#include <iostream>
using namespace std;
#include <pthread.h>
void *Bar(void *arg)
{
cout << __PRETTY_FUNCTION__ << endl;
}
class Foo {
public:
Foo();
~Foo();
static void * Bar(void *arg);
private:
pthread_t tid_self;
pthread_t tid_other;
};
Foo::Foo()
{
pthread_create(&tid_self, NULL, &Bar, NULL);
pthread_join(tid_self, NULL);
pthread_create(&tid_other, NULL, &::Bar, NULL);
}
Foo::~Foo()
{
pthread_join(tid_other, NULL);
}
void * Foo::Bar(void *arg)
{
cout << __PRETTY_FUNCTION__ << endl;
}
int main(int argc, char *argv[])
{
Foo foo;
return 0;
}
若要调用类的成员,则用如下方法:
将传递的参数定义为struct:
struct myarg{
//其他参数
Foo* pFoo;
}
然后在函数调用中:
void*Foo::Bar(void*arg)
{
struct myarg* parg = (struct myarg*) arg;
Foo* pFoo = parg->pFoo;
//下面就可以调用Foo的成员变量了
}
分享到:
相关推荐
通过这个demo,你可以学习如何在Linux环境下使用C++进行多线程串口编程,理解线程同步的概念,以及如何处理硬件交互。对于理解和应用这些技术,阅读和分析源代码将是至关重要的。同时,这个项目也可以作为进一步研究...
在Linux系统中,C++编程时常常需要创建守护线程(daemon thread)来执行特定的任务,比如监控系统状态、定时任务或确保某个服务始终运行。守护线程是一种长期运行的后台进程,它不依赖于终端会话,即使用户注销或者...
"VC多线程编程.CHM"可能包含有关在Windows环境下使用Visual C++进行多线程编程的信息,虽然与Linux环境不同,但理解不同的操作系统下的线程实现有助于跨平台开发。 另外,"第8章_Socket编程初步.ppt"可能包含关于...
本项目以C++语言在Linux环境下实现了一个多线程聊天室,利用了Linux系统强大的多线程支持和C++的高效编程能力。下面我们将详细探讨这一实现过程中的关键知识点。 首先,我们要理解多线程的概念。在单线程程序中,...
本项目提供了一个简单的C++定时器与线程使用的示例,对于初学者来说是一个很好的学习起点。下面将详细解释这两个概念以及它们在C++中的实现方式。 首先,我们来了解一下**定时器(Timer)**。定时器主要用于在指定的...
本文将深入探讨Linux环境下的C++ Socket网络编程和多线程技术,基于提供的资料列表进行详细解析。 首先,"C++_Socket网络编程大全"是关于使用C++进行Socket编程的全面教程。Socket是网络通信的基础,它为应用程序...
总结来说,这个“Linux C/C++线程基类”源代码项目提供了一个便捷的线程管理框架,使得在Linux环境下使用C++进行多线程编程变得更加简单和直观。通过理解和利用这个基类,开发者可以专注于业务逻辑,而无需关心底层...
在这个“Linux下使用EPoll+队列+多线程的C++实现”项目中,开发者使用了`epoll`来监听并管理TCP服务器的连接。`epoll`的工作流程大致如下: 1. **创建epoll句柄**:首先,通过`epoll_create()`函数创建一个epoll...
linux c++线程demo
基于linux下的c/c++程序,多线程,断点续传功能没有实现, 可传输大于2G的文件。 设计思想:预先分配的N个缓冲区形成类似循环队列。 【1】预先分配N个缓冲区,多线程方式对缓冲区进行读写互斥,有类似生产者消费者的...
Linux下的C++编程是现代软件开发中的重要技能,特别是在服务器端、嵌入式系统和开源项目中。Linux操作系统以其开放源代码、强大的性能和灵活性,为C++开发者提供了丰富的资源和工具。本实验旨在帮助你熟悉Linux环境...
打日志用的,经过了windows和linux下的测试,支持多线程,附上了实例,此实例在windows下运行只要加到win32控制台程序里就行了,记得去掉预编译头,在linux下测试,只要make 就行了,makefile已经在压缩包里了
Windows 平台上使用的是 Win32 API,而 Linux 平台上使用的是 POSIX 线程。这些差异导致了多线程编程中的平台差异问题。 Linux 定时器的实现: Linux 平台上没有方便而高效的定时器,给程序开发带来了极大的不便。...
第二套:c语言Socket编程C语言SOCKET编程指南.c语言多进程多线程程.pdf,Linux Socket rogramming by Example.pdf,Linux 多线程等10多个资料....
rk3588rk3588s使用c++多线程异步等优化c++实现源码(yolov5运行可达到142fps)+项目使用说明.zip 【资源介绍】 该项目为c++实现, 大体改自rknpu2 使用线程池异步操作rknn模型, 提高rk3588/rk3588s的NPU使用率, 进而...
总的来说,"C++对windows/linux线程的简单封装"涉及到了如何使用C++标准库的`std::thread`结合Windows API(如`CreateThread`)和Linux API(如`pthread_create`)实现跨平台的线程管理。这需要对操作系统内核的线程...
本书主要讲述采用现代C++ 在x86-64 Linux 上编写多线程TCP 网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。这是在Linux 下以native 语言编写用户态高性能...
### C++多线程编程知识点概述 #### 一、Pthread简介及基本概念 - **Pthread**: POSIX Threads 的简称,是一种跨平台的线程管理API,在多种操作系统中都有实现,包括Linux、macOS等。它遵循POSIX(Portable ...
对于C++而言,当我们需要使用多线程时,可以使用boost::thread库或者自从C++ 11开始支持的std::thread,也可以使用操作系统相关的线程API,如在Linux上,可以使用pthread库。除此之外,还可以使用omp来使用多线程。...
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...