本文介绍的是解析Linux中多线程编程并传递多个参数实例,一个简单的实例为大家分享一下。

Linux多线程编程并传递多个参数实例是本文讲解的内容,不多说,先来看内容。今天上午实验了Linux下的多线程编程,并将多个参数传递给线程要执行的函数。在Linux环境下编译通过后,还将它移到了Android的模拟器中。

解析Linux中多线程Android编程并传递多个参数实例(linux向线程传递多个参数)  Linux 多线程 Android 第1张

以下是实验程序的源代码:

  1. pthread.c
  2. #include<stdio.h>
  3. #include<unistd.h>
  4. #include<stdlib.h>
  5. #include<pthread.h>
  6. #include<string.h>
  7. structargument
  8. {
  9. intnum;
  10. charstring[30];
  11. };
  12. intmain()
  13. {
  14. inti,ret;
  15. void*thread1_func(void*);
  16. void*thread2_func(void*);
  17. void*thread_return1,*thread_return2;/*用来接收两个线程退出后的返回值*/
  18. pthread_tthread1,thread2;
  19. structargumentarg1,arg2;
  20. arg1.num=1949;
  21. strcpy(arg1.string,"中华人民共和国成立");
  22. arg2.num=2009;
  23. strcpy(arg2.string,"建国六十周年");
  24. pthread_create(&thread1,NULL,thread1_func,(void*)&arg1);
  25. pthread_create(&thread2,NULL,thread2_func,(void*)&arg2);
  26. for(i=0;i<=2;i++)
  27. {
  28. printf("我是最初的进程!\n");
  29. sleep(2);
  30. }
  31. ret=pthread_join(thread1,&thread_return1);/*等待第一个线程退出,并接收它的返回值*/
  32. if(ret!=0)
  33. printf("调用pthread_join获取线程1返回值出现错误!\n");
  34. else
  35. printf("pthread_join调用成功!线程1退出后带回的值是%d\n",(int)thread_return1);
  36. ret=pthread_join(thread2,&thread_return2);/*等待第二个线程退出,并接收它的返回值*/
  37. if(ret!=0)
  38. printf("调用pthread_join获取线程2返回值出现错误!\n");
  39. else
  40. printf("pthread_join调用成功!线程2退出后带回的值是%d\n",(int)thread_return2);
  41. return0;
  42. }
  43. void*thread1_func(void*arg)
  44. {
  45. inti;
  46. structargument*arg_thread1;/*这里定义了一个指向argument类型结构体的指针arg_thread1,用它来接收传过来的参数的地址*/
  47. arg_thread1=(structargument*)arg;
  48. for(i=0;i<=3;i++)
  49. {
  50. printf("我来自线程1,传递给我的参数是%d,%s。\n",(*arg_thread1).num,(*arg_thread1).string);
  51. sleep(2);
  52. }
  53. return(void*)123;
  54. }
  55. void*thread2_func(void*arg)
  56. {
  57. inti;
  58. structargumentarg_thread2;/*这里定义了一个argument类型的结构体arg_thread2,用来接收传过来的指针参数指向的值。
  59. 这种方法和thread1_func函数中的方法都是可行的*/
  60. arg_thread2=*(structargument*)arg;
  61. for(i=0;i<=3;i++)
  62. {
  63. printf("我来自线程2,传递给我的参数是%d,%s。\n",arg_thread2.num,arg_thread2.string);
  64. sleep(2);
  65. }
  66. return(void*)456;
  67. }

以上是 pthread.c 的内容

Linux终端下用 gcc -o pthread -lpthread pthread.c 命令进行编译,注意应该加上-lpthread

./pthread 运行结果

我来自线程2,传递给我的参数是2009,建国六十周年。
我来自线程1,传递给我的参数是1949,中华人民共和国成立。
我是最初的进程!
我来自线程2,传递给我的参数是2009,建国六十周年。
我是最初的进程!
我来自线程1,传递给我的参数是1949,中华人民共和国成立。
我是最初的进程!
我来自线程1,传递给我的参数是1949,中华人民共和国成立。
我来自线程2,传递给我的参数是2009,建国六十周年。
我来自线程2,传递给我的参数是2009,建国六十周年。
我来自线程1,传递给我的参数是1949,中华人民共和国成立。
pthread_join调用成功!线程1退出后带回的值是123
pthread_join调用成功!线程2退出后带回的值是456

可以从执行顺序看出,线程之间存在着竞争,并非是按照固定次序运行。

在这之后,将其移到Android模拟器中运行,编写Android.mk文件如下

  1. Android.mk
  2. LOCAL_PATH:=$(callmy-dir)
  3. include$(CLEAR_VARS)
  4. LOCAL_SRC_FILES:=\
  5. pthread.c
  6. LOCAL_CFLAGS=

#注意,这里一定要用LOCAL_LDLIBS的方式加载pthread库,不能使用“LOCAL_CFLAGS= -lpthread“或者”LOCAL_SHARED_LIBRARIES :=libpthread“或者"LOCAL_STATIC_LIBRARIES :=libpthread"的方式加载,否则会失败。

  1. LOCAL_LDLIBS+=-lpthread
  2. LOCAL_MODULE:=pthread
  3. include$(BUILD_EXECUTABLE)

以上是 Android.mk 的内容

编译执行,运行结果与在LINUX中类似。

小结:解析Linux多线程编程并传递多个参数实例的内容介绍完了,希望本文对你有所帮助!

转载请说明出处
知优网 » 解析Linux中多线程Android编程并传递多个参数实例(linux向线程传递多个参数)

发表评论

您需要后才能发表评论