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 }

 

posted @ 2019-03-07 21:20  leoncumt  阅读(3809)  评论(0编辑  收藏  举报