-3

スレッド化と同時実行はまったく初めてですが、関数を新しいスレッドとして開始しようとしていますが、エラーがわかりません。のようなエラーが表示されますCandidate expects X arguments, 2 provided0 < X <= 9このエラーは(2 を除く)繰り返されます。ただし、私が見たすべての例では、関数とその引数を配置するのと同じくらい簡単です。私のコードは次のようになります:

トレーナー.cpp:

int time = 5; // for example

void Member::decrement(int seconds){
    while(seconds > 0){
        seconds--;
        Sleep(1000);
    }
    isBusy = false;
}

void Member::startDecrement(string state){
    if (state == "busy"){ // isBusy is a private boolean, hence this
        isBusy = true;
        thread myThread = thread(decrement, time); // Thread for method
        myThread.join(); 
    else {
        isBusy = false;
    }
}

しかし、これは機能しませんか?私がやろうとしていることは非常に簡単ですが、私にとってはまだうまくいく方法が見つかりません。の代替手段threadも高く評価されてstd::asyncいます。これはオプションであることがわかりましたが、コンパイラのセットアップでは機能しないようです。

設定情報: -sdt=c++11MinGWWin64GCC 4.7.2

編集

私がエラーに釘付けになっているのを見て、ここにエラーログ全体があります

回答で提供されているコードも試しましたが、うまくいきませんでした。

4

2 に答える 2

2

あなたのコンパイルエラーはそれdecrementTimeがメンバー関数であることを示しているように見えるので、それを呼び出すためのオブジェクトを提供する必要があります(例えばthisポインタ):

thread myThread = thread(&Trainer::decrementTime, this, transactionTime);
于 2013-03-02T17:33:49.630 に答える
0

これは最小限完全な例です。

#include <iostream>
#include <thread>

void decrement(int seconds) {
  std::cout << "seconds: " << seconds << std::endl;
}
int main(int arg, char * argv[]) {
  int time = 100;
  std::thread myThread(decrement, time);
  myThread.join();
  return 0;
}

次のようにコンパイルします。g++ thread.cpp -o thread -std=c++11 -pthread

次回は、そのような例と完全なエラー メッセージを示し、コンパイラ フラグなどの技術的な詳細にタイプミスがないことを確認してください。

于 2013-03-02T17:06:29.333 に答える