2016-03-24 12 views
0

ループ内で常に実行され、前のスレッドが閉じている場合にのみスレッドを実行するプログラムを作成しようとしています。最初のif文の内側でstatusが宣言されているため、最初のif文の外側でスレッドの状態を確認することはできません。最初の文の中の状態をチェックすると、完全にロックアウトされます。どのようにスレッドをメインプログラムに参加させることなくこれを回避するために何かを実装することができますか? script_lock0に等しくなると、初めてstatus == future_status::readyが失敗した場合、その後、script_lockが値を変更することはありません:ロック付きループ内でのスレッド実行

int script_lock = 1; //lock is open 
    while (true) { 

     if (script_lock == 1) { 
      script_lock = 0; //lock is closed 
      auto future = async (script, execute); //runs concurrently with main program 
      auto status = future.wait_for(chrono::milliseconds(0));  
     } 

     if (status == future_status::ready) { //status not declared in scope 
      script_lock = 1; //lock is open 
     } 

     //do extra stuff 
    } 
+0

は、あなただけのwhile' '' status'後に権利を宣言することができませんか? – 4386427

答えて

0

このコードは、問題を持っています。

次のようにコードを単純化することができます

bool finished = true; 
while (true) { 
    // Define future here 

    if (finished){ 
     future = async (script, execute); 
     finished = false; 
    } 

    if (future.wait_for(chrono::milliseconds(0)) == future_status::ready) 
      finished = true; 

    //do extra stuff 
} 
+0

'エラー: '。'トークンの前にテンプレート引数がありません if(future.wait_for(chrono :: milliseconds(0))== future_status :: ready)' –

+0

はい、将来のフルタイプを把握する必要があります'async'を呼び出すより前に定義されているように' auto'はありません)、必要に応じて適切なテンプレート引数を追加します。 – Claudio

関連する問題