C ++ Delay For-Loop,无需暂停控制台

时间:2017-05-26 20:09:04

标签: c++

我正在尝试创建一个反复执行多次但在每个循环之间暂停的函数。

我曾试图使用“睡眠”,但暂停了控制台。我在网上搜索过,只发现在平时暂停控制台的答案。

代码:

int i;
for(i=0; i<500; i++) {
    std::cout << "Hello" << std::endl;
}

如何让它打印“Hello”500次,并允许用户在执行上述功能时使用控制台?

1 个答案:

答案 0 :(得分:0)

有些人评论说,你需要创建一个异步任务,以便在处理用户输入的同时做一些工作。

以下是关于如何使用线程完成此任务的最小工作示例。它基于提升,因此您必须使用-lboost_thread lboost_system

链接它
g++ test.cpp -lboost_thread -lboost_system -o test 

代码有几条注释,以解释你应该做什么:

#include <queue>
#include <iostream>
#include <boost/thread.hpp>

// set by the main thread when the user enters 'quit'
bool stop = false;
boost::mutex stopMutex; // protect the flag!


// the function that runs in a new thread
void thread_function() {
    // the following is based on the snippet you wrote
    int i;
    for(i=0; i<500; i++) {
        // test if I have to stop on each loop
        {
            boost::mutex::scoped_lock lock(stopMutex);
            if (stop) {
                break;
            }
        }

        // your task
        std::cout << "Hello" << std::endl;

        // sleep a little
        ::usleep(1000000);
    }
}


int main() {
    std::string str;
    boost::thread t(thread_function);

    while(true) {
        std::cout << "Type 'quit' to exit: ";

        // will read user input
        std::getline(std::cin, str);

        if (str == "quit") {
            // the user wants to quit the program, set the flag
            boost::mutex::scoped_lock lock(stopMutex);
            stop = true;
            break;
        }
    }

    // wait for the async task to finish
    t.join();

    return 0;
}