热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android中的多线程编程,Android中多线程编程并传递多个参数的简单例子

以下是实验程序的源代码:***********************pthread.c***************************#include#inc

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

/*********************** pthread.c ***************************/

#include

#include

#include

#include

#include

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&#61;0;i<&#61;2;i&#43;&#43;)

{

printf("我是最初的进程&#xff01;\n");

sleep(2);

}

ret&#61;pthread_join(thread1,&thread_return1);/*等待第一个线程退出&#xff0c;并接收它的返回值*/

if(ret!&#61;0)

printf("调用pthread_join获取线程1返回值出现错误&#xff01;\n");

else

printf("pthread_join调用成功&#xff01;线程1退出后带回的值是%d\n",(int)thread_return1);

ret&#61;pthread_join(thread2,&thread_return2);/*等待第二个线程退出&#xff0c;并接收它的返回值*/

if(ret!&#61;0)

printf("调用pthread_join获取线程2返回值出现错误&#xff01;\n");

else

printf("pthread_join调用成功&#xff01;线程2退出后带回的值是%d\n",(int)thread_return2);

return 0;

}

void *thread1_func(void *arg)

{

int i;

struct argument *arg_thread1;/*这里定义了一个指向argument类型结构体的指针arg_thread1&#xff0c;用它来接收传过来的参数的地址*/

arg_thread1&#61;(struct argument *)arg;

for(i&#61;0;i<&#61;3;i&#43;&#43;)

{

printf("我来自线程1&#xff0c;传递给我的参数是%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&#xff0c;用来接收传过来的指针参数指向的值。这种方法和thread1_func函数中的方法都是可行的*/

arg_thread2&#61;*(struct argument *)arg;

for(i&#61;0;i<&#61;3;i&#43;&#43;)

{

printf("我来自线程2&#xff0c;传递给我的参数是%d,%s。\n",arg_thread2.num,arg_thread2.string);

sleep(2);

}

return (void *)456;

}

/*********************** 以上是 pthread.c 的内容***************************/

在Linux终端下用 gcc -o pthread

-lpthread pthread.c 命令进行编译&#xff0c;注意应该加上

-lpthread

./pthread 运行

// 运行结果 ///

我来自线程2&#xff0c;传递给我的参数是2009,建国六十周年。

我来自线程1&#xff0c;传递给我的参数是1949,中华人民共和国成立。

我是最初的进程&#xff01;

我来自线程2&#xff0c;传递给我的参数是2009,建国六十周年。

我是最初的进程&#xff01;

我来自线程1&#xff0c;传递给我的参数是1949,中华人民共和国成立。

我是最初的进程&#xff01;

我来自线程1&#xff0c;传递给我的参数是1949,中华人民共和国成立。

我来自线程2&#xff0c;传递给我的参数是2009,建国六十周年。

我来自线程2&#xff0c;传递给我的参数是2009,建国六十周年。

我来自线程1&#xff0c;传递给我的参数是1949,中华人民共和国成立。

pthread_join调用成功&#xff01;线程1退出后带回的值是123

pthread_join调用成功&#xff01;线程2退出后带回的值是456

&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;

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

&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;&#xff03;

在这之后&#xff0c;将其移到Android模拟器中运行&#xff0c;编写Android.mk文件如下/***********************

Android.mk***************************/

LOCAL_PATH:&#61; $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:&#61; \

pthread.c

LOCAL_CFLAGS&#61;

#注意&#xff0c;这里一定要用

LOCAL_LDLIBS的方式加载pthread库&#xff0c;不能使用“LOCAL_CFLAGS&#61; -lpthread“或者”LOCAL_SHARED_LIBRARIES :&#61;libpthread“或者"LOCAL_STATIC_LIBRARIES :&#61;libpthread"的方式加载&#xff0c;否则会失败。

LOCAL_LDLIBS &#43;&#61; -lpthread

LOCAL_MODULE:&#61; pthread

include $(BUILD_EXECUTABLE)

/*********************** 以上是

Android.mk 的内容***************************/

编译执行&#xff0c;运行结果与在LINUX中类似。

转载者注&#xff1a;其实应该在Android.mk中加入这么一句话&#xff0c;要不编译可能通不过&#xff1a;LOCAL_MODULE_TAGS:&#61;optional



推荐阅读
  • volatile关键字指示一个字段可以由多个同时执行的线程修改。声明为volatile的字段不受编译器优化(假定由单个线程访问)的限制。这样可以确保该字 ... [详细]
  • [转]Makefile 使用总结
    2019独角兽企业重金招聘Python工程师标准1.Makefile简介Makefile是和make命令一起配合使用的.很多大型项目的编译都是通过Makefile来组织的,如 ... [详细]
  • Linux多线程(2)
    线程的知识点太多,太重要,所以分成三部分进行总结学习线程安全多个线程并发同一段代码时,不会出现不同的结果。常见对全局变量或者静态变量进行操作,并且没有锁保护的情况下,会出现该问题。 ... [详细]
  • 对象与对象之间的成员变量是相互独立的.要想共用数据,则需要使用静态成员或静态方法#只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变 ... [详细]
  • 安装过程:(环境:Kubuntu7.10)从其oracle公司官网http:www.oracle.comtechnologysoftwareproduc ... [详细]
  • Linux安装gcc和g++并编译运行cpp文件
    2019独角兽企业重金招聘Python工程师标准能联网的情况下:yuminstallgccyum-yinstallgccgcc-c++测试是否成功:gcc-vg++-v编辑文 ... [详细]
  • 预处理、编译汇编和链接详解
    引言C语言经典的“helloworld”程序,伴随着每个程序员一起步入编程世界的大门。从编写、编译到运行,看到屏幕上输出的“helloworld”&# ... [详细]
  • python 对象锁_Python学习之进程和线程
    Python学习之进程和线程Python学习目录在Mac下使用Python3Python学习之数据类型Python学习之函数Python学习之高级特性Python学习之函数式编程P ... [详细]
  • 编译linux搭建vs2015,使用Vs2015开发linux(centos7)程序
    1.首先下载vs2015withupdate32.然后下载VisualCforLinuxDevelopment3.在centos7上yuminstallopenssh-server ... [详细]
  • Matlab中利用mex编译Opencv实现画板绘图功能
    图形绘制是标记和可视化数据的重要方法.通过在Matlab中集成画板绘图功能,可为科学计算提供便利.1设置Matlab支持Opencv编译操作系统:麒麟14.04(基于Ubu ... [详细]
  • 实验七、绕过ASLR 第二部分
    7.1实验环境VM配置:Ubuntu12.04(x86)7.2实验原理什么是爆破?使用爆破技巧,来绕过共享库地址随机化。7.3实验过程7. ... [详细]
  • 编译lib手动编译cmake编译gtest测试程序断言和caseFixture使用gmock编译gmock测试程序参考GtestGithub使用gtest(gmock)方便我们编写 ... [详细]
  • 1.trigraph三字符组据说是为了照顾旧式键盘,还是为了键盘坏了,或者是使用非ASCII字符编码的语言输入方便,设计了一些三元字符组& ... [详细]
  • 开发笔记:googletest安装与使用
    本文由编程笔记#小编为大家整理,主要介绍了googletest安装与使用相关的知识,希望对你有一定的参考价值。简介googletest是Google公司 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
author-avatar
惠萍孝正慧云
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有