c++基础(thread)

作者: zidea | 来源:发表于2019-05-02 19:22 被阅读18次
    Cplusplus-tutorial-in-hindi.jpg

    线程是我们在编程中逃不开的话题,无论 java 、c# 还是 go 各种语言都有自己一套支持并发编程的支持。今天我们就来简单了解一下如何在 c++ 中创建thread以及使用thread

    #include <iostream>
    #include <thread>
    
    static bool is_Finished = false;
    
    void do_work()
    {
        while (!is_Finished)
        {
            std::cout << "working...\n";
        }
    }
    
    int main(int argc, char const *argv[])
    {
    
        std::thread worker(do_work);
    
        std::cin.get();
        is_Finished = true;
    
        worker.join();
    
        std::cin.get();
    }
    
    
    • 引入thread库,调用std::thead创建一个 worker 线程,然后传入一个函数do_worker在此线程中运行。
    • std::cin.get() 这个函数我们一直在用,还没有解释过他的作用,作用是当程序之行到此会阻止线程执行等待用户输入回车后退出。
    • worker.join(),在线程中执行表示让主线等待worker执行完,在继续在主线程执行,有了 join 我们主线就会等待worker线程执行完毕后再继续执行。以免worker没有执行完就退出了。
    • 这里在worker线程中循环执行输出working..知道我们输入回车在退出线程。
    void do_work()
    {
        using namespace std::literals::chrono_literals;
        while (!is_Finished)
        {
            std::cout << "working...\n";
            std::this_thread::sleep_for(1s);
        }
    }
    
    std::this_thread::sleep_for(1s);
    

    可以让thread休眠 1 秒钟

    g++ -std=c++14 thread1.cpp -o thread1
    
    void do_work()
    {
        using namespace std::literals::chrono_literals;
        std::cout << "started thread id = " << std::this_thread::get_id() << std::endl;
        while (!is_Finished)
        {
            std::cout << "working...\n";
            std::this_thread::sleep_for(1s);
        }
    }
    
    std::cout << "started thread id = " << std::this_thread::get_id() << std::endl;
    ```
    输出 thread 的 id。

    相关文章

      网友评论

        本文标题:c++基础(thread)

        本文链接:https://www.haomeiwen.com/subject/batonqtx.html