zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    美团霸面---我想说说心里话。
    docker在ubuntu14.04下的安装笔记
    ubuntu14.04 upgrade出现【Ubuntu is running in low-graphics mode】问题的一个解决办法
    Python2和Python3在windows下共存
    Python发送邮件
    Python在安装第三方模块遇到的问题及解决办法
    127.0.0.1和localhost完全相等吗?
    vim总结
    linux shell学习笔记
    Jenkins +JUnit
  • 原文地址:https://www.cnblogs.com/leoncumt/p/10492432.html
Copyright © 2011-2022 走看看