C++多线程小记

      多线程实现队列数据存取的过程中,遇到一些多线程编程的基础问题,记录一下。

      简要类比举例,新建了类作为对象:

class aClass{
    sturct structA{
      ....
    };
    
    
    bool processData(int a,char *b);
};

     在主函数文件中有子函数需要对对象中的结构体数据进行处理:

int processClassStruct(aClass &a, aClass::structA b){
  ...
}

     希望在主函数文件中新建两个线程,分别执行processData和processClassStruct函数。

     主函数中已声明:

aClass a;
aClass::structA b;
int format = 0;
char *file="/home/cabin/test.xtf"

 问题一:编译时提示无法找到libpthread.so.0等

 解决方法:在CMakeists.txt中完善多线程需要的配置

                   1、set(CMAKE_CXX_FLAGS "-std=c++14 -lpthread");

                   2、找到需要的库的路径,并在target_link_libraries完善。

问题二:调用processClassStruct时出现error:no matching function for call to ‘std::thread::_Invoker<...>

解决方法:首先,列出初始尝试调用的方法为

std::thread threadA(processClassStruct, a, b);
threadA.join();

                  编译后出现上述描述的错误。

                  正确的调用方法如下:

std::thread threadA(processClassStruct, std::ref(a), b);
threadA.join();

问题三:调用processData时出现error:invalid use of non-static member function...

解决方法:首先,列出初始尝试的调用方法为

std::thread threadB(a.processData, format, file);
threadB.join();

                  编译后出现上述描述的错误。

                  正确的调用方法如下:

std::thread threadB(&aClass::processData, std::ref(a), format, file);
threadB.join();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值