如何在 C++ 中创建包含线程对象的特定类的向量?

问题描述 投票:0回答:1

我在 C++ 中创建了一个名为AnalyzerCore 的类,如下所示:

AnalyzerCore.h

class AnalyzerCore
{
private:
    thread AnalyzerThread;
    void AnalyzerFunc();
    bool isRunning;
    int id;

public:
    AnalyzerCore(int id_in);
    ~AnalyzerCore();
};

AnalyzerCore.cpp

void AnalyzerCore::AnalyzerFunc()
{
    while (isRunning) {
        cout << "Analyzer "<< id << " is active!\n";
        this_thread::sleep_for(chrono::seconds(1));
    }
}

AnalyzerCore::AnalyzerCore(int id_in)
{
    id = id_in;
    isRunning = true;
    AnalyzerThread = thread(&AnalyzerCore::AnalyzerFunc, this);
}

AnalyzerCore::~AnalyzerCore()
{
    isRunning = false;
    if (AnalyzerThread.joinable()) AnalyzerThread.join();
}

在main.cpp中,我制作了一个AnalyzerCore向量和calss的push_back 2实例

int main()
{
    vector<AnalyzerCore> a;
    a.push_back(AnalyzerCore(0));
    a.push_back(AnalyzerCore(1));
    this_thread::sleep_for(chrono::seconds(10));
    std::cout << "Hello World!\n";
}

但是当我上面构建时,我遇到了以下错误:

'AnalyzerCore::AnalyzerCore(const AnalyzerCore &)':尝试 引用已删除的函数

我的代码有什么问题,您建议如何修复它? 谢谢!

c++ multithreading class vector pthreads
1个回答
0
投票

您无法复制

std::thread
(这意味着什么?),因此您无法复制
AnalyzerCore
。您可以使用
std::vector::emplace_back
直接在向量中构造对象,而不是构造临时对象,然后将其复制到向量中:

#include <thread>
#include <vector>

struct foo {
    std::thread t;
    int value;
    foo(int value) : value(value) {}
};

int main() {
    std::vector<foo> ts;
    ts.emplace_back(42);   // OK
    foo f;
    ts.push_back(f);       // error 
}
© www.soinside.com 2019 - 2024. All rights reserved.