1.c++11前POSIX线程
#include <cstdio>
#include <string>
#include <pthread.h>
struct Param
{
int n;
std::string str;
};
void* func1(void* args)
{
Param param = *(Param*)args;
int total = 0;
while (param.n > total)
{
printf("%s\n", param.str.c_str());
total++;
}
}
int main()
{
Param param;
param.n = 10;
param.str = "test......";
pthread_t t;
pthread_create(&t, NULL, func1, ¶m);
printf("finished......\n");
pthread_exit(NULL);
return 0;
}
/****************输出***************/
finished......
test......
test......
test......
test......
test......
test......
test......
test......
test......
test......
2.C++11之后支持std::thread
1> 可连接线程(阻塞等待线程结束并回收资源)
#include <cstdio>
#include <iostream>
#include <thread>
struct Param
{
int n;
std::string str;
};
void func1(void* args)
{
Param param = *(Param*)args;
int total = 0;
while (param.n > total)
{
printf("%s\n", param.str.c_str());
total++;
}
}
int main()
{
Param param;
param.n = 10;
param.str = "test......";
std::thread t(func1, ¶m);
t.join();
printf("finished......\n");
return 0;
}
/****************输出***************/
test......
test......
test......
test......
test......
test......
test......
test......
test......
test......
finished......
2> 不可连接线程(分离线程)
#include <cstdio>
#include <iostream>
#include <thread>
struct Param
{
int n;
std::string str;
};
void func1(void* args)
{
Param param = *(Param*)args;
int total = 0;
while (param.n > total)
{
printf("%s\n", param.str.c_str());
total++;
}
}
int main()
{
Param param;
param.n = 10;
param.str = "test......";
std::thread t(func1, ¶m);
t.detach();
printf("finished......\n");
pthread_exit(NULL);//等待线程结束,不加会直接退出
return 0;
}
/****************输出***************/
finished......
test......
test......
test......
test......
test......
test......
test......
test......
test......
test......
3.注意事项
visual studio开发linux c++使用线程时,需要添加库依赖项pthread