使用派生类的成员函数启动线程

时间:2017-04-09 14:09:19

标签: c++ multithreading oop c++11 derived-class

与此问题类似:Start thread with member function和此问题:std::thread calling method of class

但是我有以下内容:

let symbols = req.query.symbols;
let queries = [];

for(let symbol of symbols){
    let query = db.Symbol.findOne({
        where: {
            symbol
        },
        attributes: ["symbol"],
        include: [{
            as: "price",
            model: db.Price
        }],
        order: [
            [{ as: "price", model: db.Price }, "createdAt", "DESC"]
        ]
    });

    queries.push(query);
}

let values = await Promise.all(queries);

然后我必须从新线程中的另一个地方调用#include <thread> #include <iostream> class myAbstractClass { public: virtual void myFunction() = 0;//abstract class } class myFirstClass : public myAbstractClass { public: void myFunction() { std::cout << "First class here";} } class mySecondClass : public myAbstractClass { public: void myFunction() { std::cout << "Second class here";} } ,但以下内容不能编译(我想不出其他任何事情要尝试):

myFunction()

1 个答案:

答案 0 :(得分:1)

通过std::ref(myInstance)。请注意,std::thread构造函数会复制传递给它的参数(请参阅here),而您无法复制myAbstractClass

(然后,所有这些仍然有效,因为std::thread功能是根据std::invoke来描述的,它会解包由std::reference_wrapper获取的std::ref并调用指针成员函数。请参阅here)。