c ++中针对初学者的非阻塞编程

时间:2015-12-06 15:46:51

标签: c++ loops nonblocking

我是c ++中的初学者。我只是开始学习c ++。我想问一下,用c ++编写非阻塞编程是否可行。我怎么提起,我还不明白非常复杂的代码。我想要这样的东西

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

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

问题:有没有办法做到这一点?

1 个答案:

答案 0 :(得分:4)

您可以选择在C++中进行异步编程。

  • 提供异步编程机制的库
  • 使用C++运行时为您提供的内容(例如Threads
  • 自己实现这些机制

用简单的单词进行并行编程

通常,您有一个主Thread正在执行,main function(程序的入口点)中定义的内容。

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

asyncronous和syncronous是什么意思?

...但是你可以查询线程的状态,接收回调,完成后( Asyncronous programming )或阻塞等待它们完成(同步编程)。这两种方法都会变得非常复杂,您可能会遇到同步问题......

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

...这就是为什么在并行编程时经常建议使用库。一个好的和独立于平台的库是Boost。你基本上可以和Threads一样,但是以更明确的方式,这不容易出错。 Tutorial

自定义实施相比,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;
}