Linux中多线程编程并传递多个参数
来源:互联网 发布:二叉树的遍历算法c加加 编辑:程序博客网 时间:2024/06/06 17:28
Linux中多线程编程并传递多个参数实例是本文讲解的内容,不多说,先来看内容。今天上午实验了Linux下的多线程编程,并将多个参数传递给线程要执行的函数。在Linux环境下编译通过后,还将它移到了Android的模拟器中。
以下是实验程序的源代码:
pthread.c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
struct argument
{
int num;
char string[30];
};
int main()
{
int i,ret;
void *thread1_func(void *);
void *thread2_func(void *);
void *thread_return1,*thread_return2;/*用来接收两个线程退出后的返回值*/
pthread_t thread1,thread2;
struct argument arg1,arg2;
arg1.num=1949;
strcpy(arg1.string,"中华人民共和国成立");
arg2.num=2009;
strcpy(arg2.string,"建国六十周年");
pthread_create(&thread1,NULL,thread1_func,(void *)&arg1);
pthread_create(&thread2,NULL,thread2_func,(void *)&arg2);
for(i=0;i<=2;i++)
{
printf("我是最初的进程!\n");
sleep(2);
}
ret=pthread_join(thread1,&thread_return1);/*等待第一个线程退出,并接收它的返回值*/
if(ret!=0)
printf("调用pthread_join获取线程1返回值出现错误!\n");
else
printf("pthread_join调用成功!线程1退出后带回的值是%d\n",(int)thread_return1);
ret=pthread_join(thread2,&thread_return2);/*等待第二个线程退出,并接收它的返回值*/
if(ret!=0)
printf("调用pthread_join获取线程2返回值出现错误!\n");
else
printf("pthread_join调用成功!线程2退出后带回的值是%d\n",(int)thread_return2);
return 0; } void *thread1_func(void *arg)
{
int i;
struct argument *arg_thread1;/*这里定义了一个指向argument类型结构体的指针arg_thread1,用它来接收传过来的参数的地址*/
arg_thread1=(struct argument *)arg;
for(i=0;i<=3;i++)
{
printf("我来自线程1,传递给我的参数是%d,%s。\n",(*arg_thread1)。num,(*arg_thread1)。string);
sleep(2);
}
return (void *)123; }
void *thread2_func(void *arg)
{
int i;
struct argument arg_thread2;/*这里定义了一个argument类型的结构体arg_thread2,用来接收传过来的指针参数指向的值。 这种方法和thread1_func函数中的方法都是可行的*/
arg_thread2=*(struct argument *)arg;
for(i=0;i<=3;i++)
{
printf("我来自线程2,传递给我的参数是%d,%s。\n",arg_thread2.num,arg_thread2.string);
sleep(2);
}
return (void *)456;
} 以上是 pthread.c 的内容
以下是实验程序的源代码:
pthread.c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
struct argument
{
int num;
char string[30];
};
int main()
{
int i,ret;
void *thread1_func(void *);
void *thread2_func(void *);
void *thread_return1,*thread_return2;/*用来接收两个线程退出后的返回值*/
pthread_t thread1,thread2;
struct argument arg1,arg2;
arg1.num=1949;
strcpy(arg1.string,"中华人民共和国成立");
arg2.num=2009;
strcpy(arg2.string,"建国六十周年");
pthread_create(&thread1,NULL,thread1_func,(void *)&arg1);
pthread_create(&thread2,NULL,thread2_func,(void *)&arg2);
for(i=0;i<=2;i++)
{
printf("我是最初的进程!\n");
sleep(2);
}
ret=pthread_join(thread1,&thread_return1);/*等待第一个线程退出,并接收它的返回值*/
if(ret!=0)
printf("调用pthread_join获取线程1返回值出现错误!\n");
else
printf("pthread_join调用成功!线程1退出后带回的值是%d\n",(int)thread_return1);
ret=pthread_join(thread2,&thread_return2);/*等待第二个线程退出,并接收它的返回值*/
if(ret!=0)
printf("调用pthread_join获取线程2返回值出现错误!\n");
else
printf("pthread_join调用成功!线程2退出后带回的值是%d\n",(int)thread_return2);
return 0; } void *thread1_func(void *arg)
{
int i;
struct argument *arg_thread1;/*这里定义了一个指向argument类型结构体的指针arg_thread1,用它来接收传过来的参数的地址*/
arg_thread1=(struct argument *)arg;
for(i=0;i<=3;i++)
{
printf("我来自线程1,传递给我的参数是%d,%s。\n",(*arg_thread1)。num,(*arg_thread1)。string);
sleep(2);
}
return (void *)123; }
void *thread2_func(void *arg)
{
int i;
struct argument arg_thread2;/*这里定义了一个argument类型的结构体arg_thread2,用来接收传过来的指针参数指向的值。 这种方法和thread1_func函数中的方法都是可行的*/
arg_thread2=*(struct argument *)arg;
for(i=0;i<=3;i++)
{
printf("我来自线程2,传递给我的参数是%d,%s。\n",arg_thread2.num,arg_thread2.string);
sleep(2);
}
return (void *)456;
} 以上是 pthread.c 的内容
- Linux中多线程编程并传递多个参数
- 解析Linux中多线程编程并传递多个参数
- Linux中多线程编程并传递多个参数
- Linux多线程编程并传递多个参数实例
- Linux中多线程编程并传递多个参数的简单例子
- Android中多线程编程并传递多个参数的简单例子
- Linux 多线程编程中的多参数传递
- C# 中传递多个参数给多线程
- Linux多线程编程之线程之间的参数传递
- ibatis中传递多个参数
- ibatis中传递多个参数
- .net地址栏传递多个参数并编码
- c++11多线程编程参数传递若干问题
- C#多线程多参数传递
- Silverlight之Frame传递多个参数并获取完整参数
- 多线程中MFC对象参数的传递
- C#中多线程的参数传递
- java向多线程中传递参数
- bada的系统事件
- Time scale Duration
- 使用EventLog类写Windows事件日志
- Loadrunner Error code : 9013.
- S3C6410 IROM启动
- Linux中多线程编程并传递多个参数
- Matlab常用函数举例(七)
- openstack之swift 参考资料 总汇
- 前端性能
- 分享JACOB做word范例
- c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast
- Java 中的中文编码问题
- Matlab常用函数举例(八)
- 可以做窗口了,感觉离游戏又近了一步