面向初学者的 C++ 非阻塞编程

Non blocking programming in c++ for beginner

我是 c++ 的初学者。我刚刚 开始 学习 C++。我想问一下是否有可能以简单的方式用 C++ 编写非阻塞编程。我怎么提,我还不明白非常复杂的代码。我打算这样

do {
    //do stuff
    sleep(5);
    i++;
} while(i != 1000);
cout << "Enter the value : "; 
cin >> inputvale;

虽然 do {} while(); 循环正在循环,但同时我想使用 coutcin

问题:有什么办法吗?

您有一些选项可以在 C++ 中进行异步编程。

  • 提供异步编程机制的库
  • 通过使用 C++ 运行时间为您提供的东西(例如 Threads
  • 自己实施该机制

简单的并行编程

一般来说,您有一个主要的 Thread,它正在执行 main function(程序的入口点)中定义的内容。

在演示示例中,将生成另一个这样的 Thread,它正在执行与主线程并行的单独函数 (foo) 中定义的代码。你不知道这个线程什么时候开始工作,也不知道它什么时候结束。这取决于线程调度机制(那是另一个话题)...

异步和同步是什么意思?

...但是您可以查询线程的状态,接收回调,当它们完成时(异步编程)或者阻塞等待直到它们完成(同步编程)。这两种方法都可能变得非常复杂,您可能 运行 陷入同步问题...

并行编程中的库与自定义实现

... 这就是为什么在并行编程时经常推荐使用库的原因。 Boost 是一个很好的平台独立库。您基本上可以执行与 Threads 相同的操作,但方式更明确,不易出错。 Tutorial

相比之下,自定义 实现具有像 Threads 这样的低级机制,提供了更细粒度的好处,并且是寻求更多个性化解决方案的方式。

最后的话

我建议您对两者都做一些快速教程。 Boost 的一个易于遵循的 link 在上面,Thread 编程的入口点是我在下面列出的示例。

#include <iostream>
#include <thread>
using namespace std;

// Read one character from the commandline:
void foo() 
{
    // Variable holding the character
    char inputValue;
    cout << "Enter the value : ";
    cin >> inputValue;
}

int main() {

    // Spawn new thread that calls foo()
    thread fooThread(foo);

    // This is your main loop:
    int i = 0;
    do {
        //do stuff
        i++;
    } while (i != 1000);

    return 0;
}