首页 > 解决方案 > 给用户 10 分钟完成任务

问题描述

用户有 10 分钟的时间来完成这个测验,它应该在 10 分钟(600 秒)结束时终止。

目前,据我所知,代码会启动一个计时器、打印一个问题、接收一个答案并检查答案是否正确,然后检查是否经过了时间。

从调试来看,只要我没有回答问题,时间就会持续超过 10 分钟,我希望程序在达到 10 分钟后立即终止。我不知道这是否可能。

我希望代码在 600 秒结束时立即终止。while (time > 600 sec) { execute code } 的性质我不知道这是否可能或哪些功能可以帮助。

    srand(time(0));
    int score = 0;
    int QAnswered = 0;

    //initializes 10 minute timer and tells user how long they have.

    auto start = high_resolution_clock::now();
    auto end = high_resolution_clock::now();
    auto duration = duration_cast<seconds>(end - start);
    cout << "Time Limit is 10 minutes\n" << endl;

    //loops through all 10 questions
    for (int k = 0; k < 10; k++) {
        int y = rand() % 100;  //random number 1-100 to pick a question out 
        
        cout << "Q." << k + 1 << " " << Q[y] << y << endl;  //prints Question number and then Question
        cout << "Please enter your answer" << endl;;
        cin >> ans;
        transform(ans.begin(), ans.end(), ans.begin(), ::toupper);
        if ((ans == "T" || ans == "TRUE") && A[y] == "TRUE")
            score++;
        if ((ans == "F" || ans == "FALSE") && A[y] == "FALSE")
                score++;
            
        end = high_resolution_clock::now();
        duration = duration_cast<seconds>(end - start);
        if (duration.count() >= 600) {
            cout << "Time Finished" << endl;
            break;
        }
    }

标签: c++timerclocktiming

解决方案


我不确定这是一个正确的 c++ 问题,而是设计领域的问题。

据我所知,您计算时间的方式没有任何问题,但我会采用上面提出的设计,并让不同的线程执行倒计时,当倒计时完成时,终止“提问”线程。

我会使用 boost 库中的线程,因为它们可以被强制终止,而且似乎这是必要的,因为我们可能会在时间到时等待用户响应。

祝你好运!


推荐阅读