c++中通过pthread实现多线程
2012-11-14 17:07
183 查看
一 环境
1. 包含头文件#include<pthread.h>)
2.编译时加上-lpthread参数
二 函数
1. int pthread_create(pthread_t*restrict tidp,const pthread_attr_t
*restrict_attr,void*(*start_rtn)(void*),void *restrict arg); ----创建线程
返回值:
若成功则返回0,否则返回出错编号
参数
第一个参数为指向线程标识符的指针。
第二个参数是线程属性,一般设为NULL。
第三个参数是线程运行函数的起始地址,也就是函数名,该函数的返回值和参数都需要为void* 类型。
最后一个参数是运行函数的参数,该函数只有一个万能指针参数arg,如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,把这个结构的地址作为arg的参数传入。
2. int pthread_join(pthread_t thread, void **retval); -------用来等待一个线程的结束
返回值:
0代表成功。 失败,返回的则是错误号。
参数:
thread: 线程ID。
retval: 用户定义的指针,用来存储被等待线程的返回值,一般设为NULL。
三 举例
void* test(void* context){
print "hello,world";
}
int main(){
pthread_t tid ;
ret = pthread_create(&tid, NULL,test,NULL);
pthread_join(tid,NULL);
return 0;
}
四 错误
1. pthread_create的返回值为0,但是test方法中的print语句并没有执行,开始以为缓冲区没有flush,加入flush(stdin)之后,print语句有时执行,有时不执行。原因是:没有调用pthread_join 函数,main函数的里的主进程很快结束,子线程还没来得及执行就结束了。
2. 创建了两个子线程A和B,main函数里调用pthread_join函数:B线程要等A线程创建成功之后才能创建,线程创建不稳定,目前在main函数里是通过sleep的方法实现。todo 有没有相应的函数或者是其它方式来实现。
3. todo:线程结束的方式(1.函数 2.return)
1. 包含头文件#include<pthread.h>)
2.编译时加上-lpthread参数
二 函数
1. int pthread_create(pthread_t*restrict tidp,const pthread_attr_t
*restrict_attr,void*(*start_rtn)(void*),void *restrict arg); ----创建线程
返回值:
若成功则返回0,否则返回出错编号
参数
第一个参数为指向线程标识符的指针。
第二个参数是线程属性,一般设为NULL。
第三个参数是线程运行函数的起始地址,也就是函数名,该函数的返回值和参数都需要为void* 类型。
最后一个参数是运行函数的参数,该函数只有一个万能指针参数arg,如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,把这个结构的地址作为arg的参数传入。
2. int pthread_join(pthread_t thread, void **retval); -------用来等待一个线程的结束
返回值:
0代表成功。 失败,返回的则是错误号。
参数:
thread: 线程ID。
retval: 用户定义的指针,用来存储被等待线程的返回值,一般设为NULL。
三 举例
void* test(void* context){
print "hello,world";
}
int main(){
pthread_t tid ;
ret = pthread_create(&tid, NULL,test,NULL);
pthread_join(tid,NULL);
return 0;
}
四 错误
1. pthread_create的返回值为0,但是test方法中的print语句并没有执行,开始以为缓冲区没有flush,加入flush(stdin)之后,print语句有时执行,有时不执行。原因是:没有调用pthread_join 函数,main函数的里的主进程很快结束,子线程还没来得及执行就结束了。
2. 创建了两个子线程A和B,main函数里调用pthread_join函数:B线程要等A线程创建成功之后才能创建,线程创建不稳定,目前在main函数里是通过sleep的方法实现。todo 有没有相应的函数或者是其它方式来实现。
3. todo:线程结束的方式(1.函数 2.return)
相关文章推荐
- 通过boost::bind实现c++多线程
- 通过例子学设计模式之--单例模式以及多线程下说明(C++实现)
- C++实现多线程
- 通过多线程为基于 .NET 的应用程序实现响应迅速的用户
- Android Socket通信--通过jni用c++实现客户端
- 通过继承Thread实现多继承和通过实现Runnable接口实现多线程的比较
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- C++ 类的深拷贝与浅拷贝||深拷贝通过重载拷贝构造函数与重载赋值运算符实现
- 通过多线程为基于 .NET 的应用程序实现响应迅速的用户
- 以C++为例子,通过操作内存模拟实现对象的持久化存储(一)
- C++通过操作内存模拟序列化---实现多种类型的序列化(2)
- C++通过list和template实现简单的对象池
- C++实现多线程安全的单体模式(Singleton)
- Win32下两种用于C++的线程同步类(多线程实现加锁解锁)
- 合并排序(C++实现,通过g++)
- java 通过 Runnable 的接口 实现了 多线程
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- 通过多线程为基于 .NET 的应用程序实现响应迅速的用户
- 通过继承UBlueprintFunctionLibrary的类实现蓝图与C++相互通信
- C++开发人脸性别识别教程(6)——通过SVM实现性别识别