成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解析Linux中多線程Android編程并傳遞多個參數實例

移動開發 Android
本文介紹的是解析Linux中多線程編程并傳遞多個參數實例,一個簡單的實例為大家分享一下。

Linux多線程編程并傳遞多個參數實例是本文講解的內容,不多說,先來看內容。今天上午實驗了Linux下的多線程編程,并將多個參數傳遞給線程要執行的函數。在Linux環境下編譯通過后,還將它移到了Android的模擬器中。

以下是實驗程序的源代碼:

  1. pthread.c  
  2. #include <stdio.h> 
  3. #include <unistd.h> 
  4. #include <stdlib.h> 
  5. #include <pthread.h> 
  6. #include <string.h> 
  7. struct argument  
  8. {  
  9.     int num;  
  10.     char string[30];  
  11. };  
  12. int main()  
  13. {  
  14.     int i,ret;  
  15.     void *thread1_func(void *);  
  16.     void *thread2_func(void *);  
  17.     void *thread_return1,*thread_return2;/*用來接收兩個線程退出后的返回值*/  
  18.     pthread_t thread1,thread2;  
  19.     struct argument arg1,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.     return 0;  
  42. }  
  43. void *thread1_func(void *arg)  
  44. {  
  45.     int i;  
  46.     struct argument *arg_thread1;/*這里定義了一個指向argument類型結構體的指針arg_thread1,用它來接收傳過來的參數的地址*/  
  47.     arg_thread1=(struct argument *)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.     int i;  
  58.     struct argument arg_thread2;/*這里定義了一個argument類型的結構體arg_thread2,用來接收傳過來的指針參數指向的值。
  59. 這種方法和thread1_func函數中的方法都是可行的*/  
  60.     arg_thread2=*(struct argument *)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;  

以上是 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:= $(call my-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多線程編程并傳遞多個參數實例的內容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-30 17:31:32

Qt 多線程 信號

2011-06-22 16:18:23

QT 多線程 QSocket

2011-06-13 10:03:19

Qt 多線程 編程

2013-07-16 10:12:14

iOS多線程多線程概念多線程入門

2017-03-08 14:18:37

Linux多線程編程

2023-06-13 13:39:00

多線程異步編程

2009-03-12 10:52:43

Java線程多線程

2011-06-02 17:27:49

iphone 多線程

2023-05-12 14:14:00

Java線程中斷

2024-10-21 16:59:37

C#編程多線程

2010-03-15 17:56:23

Java多線程

2024-03-27 08:47:10

Python多線程Threading

2011-06-20 13:43:08

Qt Socket 線程

2009-12-08 12:14:43

2013-12-02 17:33:20

Linux進程多線程

2023-06-07 13:49:00

多線程編程C#

2024-03-27 09:01:53

微服務FeignToken

2023-04-02 17:53:10

多線程編程自測

2023-06-05 07:56:10

線程分配處理器

2023-06-06 08:17:52

多線程編程Thread類
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品一区二区 | 九九热这里 | 国产精品久久久久久二区 | 九九热免费视频在线观看 | 九九看片 | 亚洲国产一区在线 | 欧美成人在线影院 | 一区二区三区四区av | 精品亚洲一区二区三区四区五区高 | 毛片99| 免费一区| 国产人免费人成免费视频 | 嫩呦国产一区二区三区av | 成人免费观看视频 | 亚洲天堂中文字幕 | 国产精品久久久久久久久久久免费看 | 亚洲午夜在线 | 成人毛片视频免费 | 日本久久精 | 久久久精品国产 | 一级在线观看 | 五月天国产视频 | 日韩美香港a一级毛片免费 国产综合av | 91佛爷在线观看 | www.成人在线视频 | 国产第一页在线观看 | 性做久久久久久免费观看欧美 | 91在线精品一区二区 | 成人一区二区三区在线观看 | 国产成人精品一区二区三区视频 | 日韩不卡三区 | 视频一区二区在线观看 | 九九九久久国产免费 | 欧美v在线 | 日韩另类| 欧美精品一区二区三区蜜臀 | 国产成人精品区一区二区不卡 | 欧美性受 | 亚洲高清在线视频 | 精品一区二区三区四区 | 天堂一区在线观看 |