Pho*_*nix 3 c++ loops nonblocking
我是C ++的初学者。我刚刚开始学习c ++。我想问一下是否有可能以简单的方式用c ++编写非阻塞编程。我怎么说,我还不了解非常复杂的代码。我打算这样
do {
//do stuff
sleep(5);
i++;
} while(i != 1000);
cout << "Enter the value : ";
cin >> inputvale;
Run Code Online (Sandbox Code Playgroud)
虽然do {} while();循环正在循环,但同时我想使用cout和cin。
问题: 有什么办法可以做到这一点?
您可以通过一些选项在中进行异步编程C++。
C++运行时为您提供的功能(例如Threads)自己实现该机制通常,您有一个main Thread(正在执行),它在main function(程序的入口)中定义。
在演示示例中,Thread将生成另一个这样的代码,它正在执行代码,该代码foo在与主线程并行的单独函数()中定义。您不知道该线程何时执行工作或何时完成。这取决于线程调度机制(这是另一个主题)...
...但是,您可以查询线程的状态,在线程完成时接收回调(异步编程)或阻塞等待直到线程完成(同步编程)。两种方法都可能变得非常复杂,并且您可能会遇到同步问题...
...这就是为什么在并行编程中经常建议使用库的原因。一个好的平台独立库是Boost。基本上,您可以执行与方法相同的操作,Threads但是可以使用更明确的方式进行操作,这样就不容易出错。讲解
相比之下,具有低级机制的自定义实现(例如)Threads具有更多粒度的好处,并且是寻求更多个性化解决方案的方式。
我建议您对两者都做一些快速教程。上面有一个易于遵循的链接,下面是我的示例Boost,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;
}
Run Code Online (Sandbox Code Playgroud)