多线程实现队列数据存取的过程中,遇到一些多线程编程的基础问题,记录一下。
简要类比举例,新建了类作为对象:
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();