2017-01-07 21 views
1

数週間前に私は算術アルゴリズムをコーディングしましたが、スレッドを使用して速度を上げようとしています。私が直面している問題は、関数をスレッドに渡すことです。これは今私が持っているものです。スレッドで関数を改善する

これは、私がエンコードする機能を持つクラスです。私はメイン

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 

にスレッドを作成する方法

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

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

そして、ここで私が手にエラーはありません:「コンストラクタSTDのインスタンス::スレッド::スレッドは、」引数リストと一致しました。 何が間違っていますか?

ありがとうございました。

+0

エラーが発生しました。 'model - > Process'は、この質問を書いている間違いです。コード上にこのようなことはありません。 – Capie

+2

[Start thread from member function](http://stackoverflow.com/questions/10673585/start-thread-with-member-function) – ks1322

+0

実際のエラーメッセージを投稿していただきありがとうございます。将来の参照のために、SOエディタで決して*書く*コードはありません。 *実際の問題が存在するソースから貼り付けて、十分にインクルードしてください*あなたの投稿を取り込み、ソースファイルにダンプしたり、コンパイルしたり、試したり、同じエラーを複製したりすることができます。あなたのエラーとは無関係だが、あなたの目標に関連して、複数のスレッドが同時に使用するファイルストリームを送信することには注意が必要です。その流れに対する同時位置決めおよび操作の問題は、頭に大きな痛みを引き起こす可能性があります。 – WhozCraig

答えて

1

あなたはいくつかのことを間違っています。

model-->Process 

これは明らかなタイプミスです。しかしそれに加えて、これはとにかく動作しません。 "model-> Process"は呼び出し可能なオブジェクトではありません。

あなたの可能性意図がこれです:、ここでは動作します新しいスレッドを構築する方法、の

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

一つのクラスのメソッドへのポインタ(&ModelI::Process)であり、かつに使用するオブジェクト新しいスレッドのクラスメソッドを呼び出します(model)。

そして、modelsourcestd::fstreamオブジェクトであり、std::fstreamオブジェクトへのポインタではないことを前提としています。

さらに、それらがオブジェクトでもオブジェクトへのポインタでも、結果のスレッドが結合されるまで、それらのスレッドはポインタ引数でそれらを受け入れるため、スコープ内に残して破棄する必要はないことは明らかです。

+0

素晴らしい、本当に良い答え。ありがとう – Capie

関連する問題