热门标签 | 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



推荐阅读
  • Java多线程实现:从1到100分段求和并汇总结果
    本文介绍如何使用Java编写一个程序,通过10个线程分别计算不同区间的和,并最终汇总所有线程的结果。每个线程负责计算一段连续的整数之和,最后将所有线程的结果相加。 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • Linux环境下C语言实现定时向文件写入当前时间
    本文介绍如何在Linux系统中使用C语言编程,实现在每秒钟向指定文件中写入当前时间戳。通过此示例,读者可以了解基本的文件操作、时间处理以及循环控制。 ... [详细]
  • 深入解析Java多线程与并发库的应用:空中网实习生面试题详解
    本文详细探讨了Java多线程与并发库的高级应用,结合空中网在挑选实习生时的面试题目,深入分析了相关技术要点和实现细节。文章通过具体的代码示例展示了如何使用Semaphore和SynchronousQueue来管理线程同步和任务调度。 ... [详细]
  • 对于许多初学者而言,遇到总线错误(bus error)或段错误(segmentation fault/core dump)是极其令人困扰的。本文详细探讨了这两种错误的成因、表现形式及解决方法,并提供了实用的调试技巧。 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • 本文深入探讨了 Delphi 中类对象成员的核心概念,包括 System 单元的基础知识、TObject 类的定义及其方法、TClass 的作用以及对象的消息处理机制。文章不仅解释了这些概念的基本原理,还提供了丰富的补充和专业解答,帮助读者全面理解 Delphi 的面向对象编程。 ... [详细]
  • 本文详细介绍了Linux内核中misc设备驱动框架的实现原理及应用方法,包括misc设备的基本概念、驱动框架的初始化过程、数据结构分析以及设备的注册与注销流程。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文深入探讨了面向切面编程(AOP)的概念及其在Spring框架中的应用。通过详细解释AOP的核心术语和实现机制,帮助读者理解如何利用AOP提高代码的可维护性和开发效率。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文介绍了如何在 C# 和 XNA 框架中实现一个自定义的 3x3 矩阵类(MMatrix33),旨在深入理解矩阵运算及其应用场景。该类参考了 AS3 Starling 和其他相关资源,以确保算法的准确性和高效性。 ... [详细]
  • CentOS 6.8 上安装 Oracle 10.2.0.1 的常见问题及解决方案
    本文记录了在 CentOS 6.8 系统上安装 Oracle 10.2.0.1 数据库时遇到的问题及解决方法,包括依赖库缺失、操作系统版本不兼容、用户权限不足等问题。 ... [详细]
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社区 版权所有