首页 > 解决方案 > 输入流似乎无法正常工作

问题描述

我正在创建一个关于测验的迷你项目,我想强制用户在 15 秒内提供输入。我希望用户按回车键或任意键移至下一个问题。该程序运行良好,没有超时,但如果发生超时, getch() 或任何其他用于获取密钥的函数都不起作用。我必须按 Enter 3-4 次,然后它才能重新开始工作。程序在超时后挂起。我正在使用线程来阅读答案。

正在阅读答案的功能:

void read_mcq_ans() {
   cin >> mcq_ans;
   cv.notify_one();
}

用于检查超时的主函数代码

        thread th(read_mcq_ans);
        mutex mtx;
        unique_lock<mutex> lck(mtx);
        bool timeout = false;
        cout << "Ans :  ";

        while (cv.wait_for(lck, chrono::seconds(1)) == cv_status::timeout)
        {
            cout << "\nTIME OUT";
            th.detach();
            timeout = true;
            break;
        }
        
        if(timeout == false)
            th.join();

        cout << "\n\n..........Press Enter.........";
        getch();
        cout << "\n\n";

提前致谢。

标签: c++multithreadinggetch

解决方案


推荐阅读