stl-thread-001

来源:互联网 发布:律师知乎 编辑:程序博客网 时间:2024/06/05 06:04

介绍c++11引入的标准线程类thread,属于入门系列。
这是第一篇,转自c++标准库:开2个子线程运行,并取得结果;

#include<future>#include<thread>#include<iostream>#include<random>#include<chrono>#include<exception>using std::cout;using std::endl;void doSomeThing(char c){    std::default_random_engine engine(c);    std::uniform_int_distribution<int> distribute(200, 1000);    for (int i = 0; i < 10;i++)    {        std::this_thread::sleep_for(std::chrono::milliseconds(distribute(engine)));        cout.put(c).flush();    }}int main(){    cout << "2 task starting..." << endl;    std::future<void> f1 = std::async([]{doSomeThing('-'); });    std::future<void> f2 = std::async([]{doSomeThing('+'); });    if (f1.wait_for(std::chrono::seconds(0)) != std::future_status::deferred ||         f2.wait_for(std::chrono::seconds(0)) != std::future_status::deferred)    {        while (f1.wait_for(std::chrono::seconds(0)) != std::future_status::ready &&               f2.wait_for(std::chrono::seconds(0)) != std::future_status::ready)        {            std::this_thread::yield();        }    }    cout << endl;    try    {        f1.get();//取得结果,每一个future的get()只能执行一次;        f2.get();//取得结果,每一个future的get()只能执行一次;    }    catch (const std::exception& e)    {        cout << "exception:" << e.what();    }    cout << "\ndone!" << endl;    getchar();    getchar();    return 0;}
0 0