2

Enterキーを押すと2番目のスレッドが中断され、終了メッセージを出力する3つのスレッドを実行するための次のコードがあります。

void input_val()
{
    // DO STUFF
return;
}

void process_val()
{
       // DO STUFF
       try{
        cout << "waiting for ENTER..." << endl;
        boost::this_thread::sleep(boost::posix_time::milliseconds(200));
    }
    catch(boost::thread_interrupted&){
        cout << "exit process thread" << endl;
        return;
    }
    return;
}


void output_val()
{
    // DO STUFF
}

int main()
{
    char key_pressed;

    boost::thread input_thread(boost::bind(&input_val));
    boost::thread process_thread(boost::bind(&process_val));
    boost::thread output_thread(boost::bind(&output_val));

    cin.get(key_pressed);
    process_thread.interrupt();

    input_thread.join();
    process_thread.join();
    output_thread.join();
    return 0;
}

process_thread は「ENTER」で中断されますが、「終了プロセス スレッド メッセージ」は出力されません。昨日、同様のプログラムが適切に実行されたので、誰が問題が何であるかを示唆できますか。前もって感謝します!

4

1 に答える 1

2

実行中のスレッドprocess_valは 200 ミリ秒しかスリープしていないため、プログラムの開始後 200 ミリ秒以内にキーを押さない限り、そのスレッドは既に返されており、try/catch は無効になっています。スリープを数千ミリ秒に増やすと、待機中にキーを押す時間ができるはずです。

于 2013-09-27T04:15:24.613 に答える