1.c++11前POSIX线程
#include#include #include struct Param { int n; std::string str; }; void* func1(void* args) { Param param = *(Param*)args; int total = 0; while (param.n > total) { printf("%sn", 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#include #include struct Param { int n; std::string str; }; void func1(void* args) { Param param = *(Param*)args; int total = 0; while (param.n > total) { printf("%sn", 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#include #include struct Param { int n; std::string str; }; void func1(void* args) { Param param = *(Param*)args; int total = 0; while (param.n > total) { printf("%sn", 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



