用线程

时间:2017-01-07 18:10:49

标签: c++ multithreading

几周前我编写了一个算术算法,现在我正在尝试使用线程来提高速度。我面临的问题是将函数传递给线程。这就是我现在所拥有的。

这是我有编码功能的类。

class ModelI
{
public:
    ModelI();
    void Process(fstream *source, fstream *target, ModeE mode,int bits);

protected:
    /*........*/
};

这里我是如何在主

上创建线程的
    vector<thread> t;
    ModelI* model = new ModelI;;
   clock_t begin = clock();
   for (int i = 0;i < 8;i++) {
            t.push_back(thread(model->Process,ref(source),ref(target),MODE_ENCODE,bits));//---> Error here

我得到的错误是:“没有构造函数std :: thread :: thread的实例”匹配参数列表。 我做错了什么?

感谢。

1 个答案:

答案 0 :(得分:1)

你做错了几件事。

model-->Process

这是一个明显的错字。但除此之外,无论如何这都行不通。 “model-&gt; Process”不是可调用对象。

你可能的意图是:

t.push_back(thread(&ModelI::Process, model, &source, &target, MODE_ENCODE, bits))

构造新线程的方法之一,可以在这里工作,是通过指向类方法(&ModelI::Process)的指针,以及用于在新线程中调用类方法的对象({ {1}})。

这假设modelmodelsource个对象,而不是std::fstream个对象的指针。

此外,无论是对象还是指向这些对象的指针,您显然都明白它们必须保留在作用域中,并且不会被破坏,直到结果线程被连接,因为这些线程将通过其指针参数接受它们。