zoukankan      html  css  js  c++  java
  • c++11 thread类的简单使用

    一个thread对象就代表一个线程执行,当对象创建完成后,线程函数就开始执行,下面这段话是c++11的thread类介绍。

    An initialized thread object represents an active thread of execution; Such a thread object is joinable, and has a unique thread id.

    A default-constructed (non-initialized) thread object is not joinable, and its thread id is common for all non-joinable threads.

    A joinable thread becomes not joinable if moved from, or if either join or detach are called on them.

    需要注意的是:当一个线程对象是joinable状态时,对象在析构前需要使用detach或者jion函数。

    现在写代码证实这段话,加深c++11 thread类的使用,具体代码如下:

    #include "stdafx.h"
    #include <memory>
    #include <string>
    #include <iostream>
    #include <thread>
    
    void pause_thread(int nSleepTime)
    {
        //std::cout << "pause for: " << nSleepTime << "
    ";
        std::this_thread::sleep_for(std::chrono::seconds(nSleepTime));
    }
    
    int main()
    {
        //thread1和thread2 是初始化的线程对象,它是joinable状态并且有唯一的id;
        std::thread thread1(pause_thread, 1);
        std::thread thread2(pause_thread, 2);
    
        //thread3是未初始化的线程对象,它是非joinable状态,id不唯一
        std::thread thread3;
    
        //验证代码
        if (thread1.joinable())
        {
            std::cout <<"thread1 is joinable" << std::endl;
        }
        if (thread2.joinable())
        {
            std::cout << "thread2 is joinable" << std::endl;
        }
    
        if (!thread3.joinable())
        {
            std::cout << "thread3 is not joinable" << std::endl;
        }
    
        std::cout << "***********分割线*****************
    
    " << std::endl;
    
        std::cout << "thread1: " << thread1.get_id() << std::endl;
        std::cout << "thread2: " << thread2.get_id() << std::endl;
        std::cout << "thread3: " << thread3.get_id() << std::endl;
    
        //thread objects that are joinable shall either be joined
        // or detached before they are destroyed.
        thread1.join();
        thread2.detach();
    
        std::cout << "*************分割线****************
    
    " << std::endl;
    
        //A joinable thread becomes not joinable if moved from, 
        //or if either join or detach are called on them.
    
        if (!thread1.joinable())
        {
            std::cout << "thread1 becomes not joinable" << std::endl;
        }
        if (!thread2.joinable())
        {
            std::cout << "thread2 becomes not joinable" << std::endl;
        }
    
        return 0;
    }

    运行结果:
    这里写图片描述

    参考资料:http://www.cplusplus.com/reference/thread/thread/

  • 相关阅读:
    SAP Easy tree
    SAP Column tree
    SAP Tree
    SAP 文本框多行输入
    SAP -SE30 程序运行时间分析
    SAP 实例- 页签tabsrip
    ABAP CDS
    ABAP CDS
    ABAP CDS
    ABAP CDS
  • 原文地址:https://www.cnblogs.com/jinxiang1224/p/8468165.html
Copyright © 2011-2022 走看看