ubuntu 下的C++多线程遇到的问题(2)--向线程传递参数
2017-08-24 20:38
387 查看
#include <iostream>
#include <cstdlib>
#include<pthread.h>
using namespace std;
#define NUM_THREADS 5
void* say_hello(void *args)
{
int ii=*((int *)args);
cout<<"Hello Runoob!线程id"<<ii<<endl;
pthread_exit(NULL);
}
int main()
{
pthread_t tids[NUM_THREADS];
int indexes[NUM_THREADS];
for(int i=0;i<NUM_THREADS;i++)
{
//cout<<"main()创建线程,"<<i<<endl;
indexes[i]=i;
int ret=pthread_create(&tids[i],NULL,say_hello,(void*)&i);
if(ret !=0)
{
cout<<"pthread_cread error:error_code"<<ret<<endl;
exit(-1);
}
}
pthread_exit(NULL);
//cout << "Hello World!" << endl;
return 0;
}
创建的线程id总是有时候会一样,后来对照教程一个一个看过去,也没找到不同之处,百度之,但是关键词真不知道(也没找到合想的),继续找不同,发现在int ret=pthread_create(&tids[i],NULL,say_hello,(void*)&i);而教程里是(void *)&indexes[i].最后试了下,发现数组才能很好保存,让每个线程id不一样.
最后,再次百度之,发现一个很好的关键词:向多线程传递参数. 在一篇博客上找到解释:
"在用传递指针或传递引用的方式时,要注意参数的作用域问题,保证被调函数返回前:1)变量地址不变,变量值不变".那篇博客用vector保存局部变量,可惜因为是动态开辟内存的,因此需要提前分配内存就行
#include <cstdlib>
#include<pthread.h>
using namespace std;
#define NUM_THREADS 5
void* say_hello(void *args)
{
int ii=*((int *)args);
cout<<"Hello Runoob!线程id"<<ii<<endl;
pthread_exit(NULL);
}
int main()
{
pthread_t tids[NUM_THREADS];
int indexes[NUM_THREADS];
for(int i=0;i<NUM_THREADS;i++)
{
//cout<<"main()创建线程,"<<i<<endl;
indexes[i]=i;
int ret=pthread_create(&tids[i],NULL,say_hello,(void*)&i);
if(ret !=0)
{
cout<<"pthread_cread error:error_code"<<ret<<endl;
exit(-1);
}
}
pthread_exit(NULL);
//cout << "Hello World!" << endl;
return 0;
}
创建的线程id总是有时候会一样,后来对照教程一个一个看过去,也没找到不同之处,百度之,但是关键词真不知道(也没找到合想的),继续找不同,发现在int ret=pthread_create(&tids[i],NULL,say_hello,(void*)&i);而教程里是(void *)&indexes[i].最后试了下,发现数组才能很好保存,让每个线程id不一样.
最后,再次百度之,发现一个很好的关键词:向多线程传递参数. 在一篇博客上找到解释:
"在用传递指针或传递引用的方式时,要注意参数的作用域问题,保证被调函数返回前:1)变量地址不变,变量值不变".那篇博客用vector保存局部变量,可惜因为是动态开辟内存的,因此需要提前分配内存就行
相关文章推荐
- C#调用C++写的dll 函数传递参数问题,请有经验的人详细描述
- C++中函数参数的对象值传递问题
- 一步一步学习C#中的多线程 --- 1、初识线程(2)--给线程传递参数
- Silverlight实用窍门系列:23.Silverlight多线程技术Thread的应用,后台线程更新UI控件,向多线程传递参数【附带源码实例】
- 多线程:如何在调用线程时传递参数总结
- c++之指针作为函数参数传递的问题
- 多线程:如果在调用线程时传递参数
- pthread_create 参数传递指针问题(创建多线程时,循环变量的传递)
- C#调用C++编写的DLL函数各种参数传递问题
- 【C++学习点滴】关于参数传递的问题
- 使用Handler在线程之间传递消息所遇到的问题及解决方法
- Servlet参数持久化时可能遇到的多线程问题以及解决之道
- chap 17:当JNI遇到多线程--java对象如何被C++中的多个线程访问?
- 线程Thread传递一个或多个参数问题
- c# 多线程的使用-为线程传递参数
- 创建多个线程的参数传递问题
- Apache RewriteRule传递参数时遇到的问题
- 多线程:如何在调用线程时传递参数 --转
- 我遇到的参数传递中 双引号单引号嵌套问题
- 23.Silverlight多线程技术Thread的应用,后台线程更新UI控件,向多线程传递参数