首页 >后端开发 >C++ >如何使用并发在 C 中实现非阻塞控制台输入?

如何使用并发在 C 中实现非阻塞控制台输入?

Barbara Streisand
Barbara Streisand原创
2024-10-29 17:04:02548浏览

How to Implement Non-Blocking Console Input in C   Using Concurrency?

C 语言中的非阻塞控制台输入

编程中的一个常见要求是在程序不断运行和输出信息的同时处理用户命令。 C 中的传统控制台输入方法会阻止程序执行,直到用户按 Enter 键为止,但对于非阻塞输入,您需要替代方法。

解决方案:并发

C 11 引入了 std::async 和 std::future 并发库。这允许您在不停止主程序的情况下为非阻塞输入生成一个单独的线程。

实现

提供的代码演示了非阻塞控制台输入:

<code class="cpp">#include <iostream>
#include <future>
#include <thread>
#include <chrono>

std::string getAnswer()
{
    std::string answer;
    std::cin >> answer;
    return answer;
}

int main()
{
    std::chrono::seconds timeout(5);
    std::cout << "Do you even lift?" << std::endl << std::flush;
    std::string answer = "maybe"; //default to maybe
    std::future<std::string> future = std::async(getAnswer);
    if (future.wait_for(timeout) == std::future_status::ready)
        answer = future.get();

    std::cout << "the answer was: " << answer << std::endl;
    exit(0);
}</code>

在此代码中:

  • getAnswer() 是在单独线程中读取用户输入的函数。
  • std::async 函数启动 getAnswer( ) 在自己的线程中。
  • future.wait_for() 函数检查 getAnswer() 是否在指定的时间范围内(在本例中为 5 秒)完成。
  • 如果 getAnswer()完成后,其结果存储在answer变量中。
  • 当用户输入线程在后台运行时,程序继续运行并输出信息。

以上是如何使用并发在 C 中实现非阻塞控制台输入?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn