• C++11中多线程的创建


    C++11语言本身支持了多线程。在以往,linux和windows下创建线程的方式是不一样的,这也就降低了程序的可移植性和可读性。

    以前对多前程的了解不多,最近在看一些C++11的新特性,看到多线程这里,故做以记录。

    创建线程的两种方式:

    1.线程的入口必须是一个函数,那么就可以用函数的方式:

    1)导入线程库函数:#include<Thread>

    2)使用Thread mytobj(printf)创建一个线程。printf是函数名,也就是线程的入口地址

     1 //自己创建的线程也要从一个函数开始执行
     2 void mythread() {
     3     cout << "这是我创建的线程1" << endl;
     4     cout << "这是我创建的线程2" << endl;
     5     cout << "这是我创建的线程3" << endl;
     6     cout << "这是我创建的线程4" << endl;
     7     cout << "这是我创建的线程5" << endl;
     8     cout << "这是我创建的线程6" << endl;
     9     cout << "这是我创建的线程7" << endl;
    10     cout << "这是我创建的线程8" << endl;
    11     cout << "这是我创建的线程9" << endl;
    12 }
    13 int main()  //主线程
    14 {
    15     //创建一个线程
    16     thread mytobj(mythread);
    17     if (mytobj.joinable())
    18     {
    19         cout << "现在可以detach或者join:1" << endl;
    20     }
    21     else
    22     {
    23         cout << "现在不能detach或者join:1" << endl;
    24     }
    25     mytobj.join();
    26     //mytobj.detach();
    27     if (mytobj.joinable())
    28     {
    29         cout << "现在可以detach或者join:2" << endl;
    30     }
    31     else
    32     {
    33         cout << "现在不能detach或者join:2" << endl;
    34     }
    35 }

    2.使用类对象来创建线程

     1     //使用类对象来创建线程
     2     int data = 10;
     3     char a = 'a';
     4     char *p = &a;
     5     std::string str = "you are pretty good!!!!!!!!!!!!!!!";
     6     CreatThreadClass ctc(data,p);
     7     thread mytobj(ctc);
     8     if (mytobj.joinable())
     9     {
    10         cout << "现在可以创建一个线程1" << endl;
    11     }
    12     else
    13     {
    14         cout << "现在不能创建一个线程1" << endl;
    15     }
    16     mytobj.detach();
    17 
    18     if (mytobj.joinable())
    19     {
    20         cout << "现在可以创建一个线程2" << endl;
    21     }
    22     else
    23     {
    24         cout << "现在不能创建一个线程2" << endl;
    25     }
    26     std::string str222 = GetIns::getinstance()->lastFunc(str);
    27     cout << str222 << endl;
    28 }

    使用类对象来创建线程,必要要重载()运算符,在这个重载函数中,调用其他的函数。

    1 void operator()(){
    2 
    3       //TODO      
    4 }
  • 相关阅读:
    安装Oracle时出现环境变量Path的值大于1023的解决办法
    JavaScript通过元素id和name直接获取元素的方法
    [转载]T-SQL(Oracle)语句查询执行顺序
    [转载]T-SQL(MSSQL)语句查询执行顺序
    HTML5权威指南 17.其他API
    HTML5权威指南 16.拖放API与通知API
    HTML5权威指南 15.获取地理位置信息
    HTML5权威指南 14.使用Web Workers处理线程
    HTML5权威指南 13.扩展的XMLHttpRequest API
    HTML5权威指南 12.WebRTC通信
  • 原文地址:https://www.cnblogs.com/leoncumt/p/10492432.html
Copyright © 2020-2023  润新知