我正在尝试在我班上的方法中第一次使用线程。
这是我的代码的简化版本,导致相同的错误。
let savedImage = SavedData.image(for: self)
print(savedImage!)
在实际代码中,我希望每个线程都填充更大的向量块。
我在Clion项目中使用CMakeLists.txt文件:
#include <thread>
#include <iostream>
#include <memory>
#include <vector>
class Foo{
public:
std::vector<int> DoThing() {
return {1};
}
std::vector<int> DoThingMultiThread(unsigned int threads) {
std::vector<int> values;
std::vector<std::thread> threadVec(threads);
for (unsigned int i = 0; i < threads; ++i)
{
threadVec.at(i) = std::thread(&Foo::DoPartialThing, this, i, i, std::ref(values));
}
return values;
}
private:
void DoPartialThing(unsigned int value, unsigned int position, std::vector<unsigned int> &container) {
container.at(position) = value;
}
};
我是否包含标志-pthread与编译无关,它总是给出:
cmake_minimum_required(VERSION 3.6)
project(ThreadTest)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS -pthread)
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
set(SOURCE_FILES main.cpp foo.hpp foo.cpp)
add_executable(ThreadTest ${SOURCE_FILES})
我见过很多与此类似的问题,但是他们都没有在线程构造函数中使用this参数,或者没有使用ref。我的猜测是我将pthread与错误联系起来,但这只是猜想。
答案 0 :(得分:1)
std::vector<int> values;
... std::vector<unsigned int> &container) { ...
std::vector<int>
和std::vector<unsigned int>
是不相关的类型。没有从一个转换到另一个。