C++ 简单线程池
C++ Simple Thread Pool
我正在尝试用 C++ 实现一个简单的线程池,如下所示:
class worker {
public:
worker();
thread mThread;
private:
void run();
};
worker::worker() {
(this->mThread = thread(&worker::run, this)).detach();
}
class threadpool {
public:
threadpool(int size);
void addTask();
private:
vector<worker> workers;
};
但是当我添加线程池的构造函数时:
threadpool::threadpool(int size) {
this->workers = vector<worker>(size, worker());
}
我收到一个 "attempting to reference a deleted function" 错误,据我所知,这意味着我在代码中的某处试图复制一个线程。有什么办法可以解决这个问题吗?
最小可能的变化是:
threadpool::threadpool(int size) {
this->workers = vector<worker>(size);
}
也就是说,初始化列表很不错。
threadpool::threadpool(int size)
: workers{size}
{ }
(你 应该 从 int size
变为 size_t
或者 - 如果你感觉圣洁 - vector<worker>::size_type
)。
提供原型 worker()
对象请求复制,其隐式构造函数已删除,因为您提供了显式默认构造函数。
我正在尝试用 C++ 实现一个简单的线程池,如下所示:
class worker {
public:
worker();
thread mThread;
private:
void run();
};
worker::worker() {
(this->mThread = thread(&worker::run, this)).detach();
}
class threadpool {
public:
threadpool(int size);
void addTask();
private:
vector<worker> workers;
};
但是当我添加线程池的构造函数时:
threadpool::threadpool(int size) {
this->workers = vector<worker>(size, worker());
}
我收到一个 "attempting to reference a deleted function" 错误,据我所知,这意味着我在代码中的某处试图复制一个线程。有什么办法可以解决这个问题吗?
最小可能的变化是:
threadpool::threadpool(int size) {
this->workers = vector<worker>(size);
}
也就是说,初始化列表很不错。
threadpool::threadpool(int size)
: workers{size}
{ }
(你 应该 从 int size
变为 size_t
或者 - 如果你感觉圣洁 - vector<worker>::size_type
)。
提供原型 worker()
对象请求复制,其隐式构造函数已删除,因为您提供了显式默认构造函数。