热门标签 | 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 SE 8新特性:Lambda表达式与函数式编程
    本文作为‘Java SE 8新特性概览’系列的一部分,将详细探讨Lambda表达式。通过多种示例,我们将展示Lambda表达式的不同应用场景,并解释编译器如何处理这些表达式。 ... [详细]
  • JUC并发编程——线程的基本方法使用
    目录一、线程名称设置和获取二、线程的sleep()三、线程的interrupt四、join()五、yield()六、wait(),notify(),notifyAll( ... [详细]
  • 我自己做了一个网站图片的抓取,感觉速度有点慢抓取4000张图片可能得用15分钟左右的时间,我百度看用线程可以加快抓取,然后创建了5个线程抓取,但是5个线程是同步执行同样的操作一个图片就 ... [详细]
  • 在iOS开发中,多线程技术的应用非常广泛,能够高效地执行多个调度任务。本文将重点介绍GCD(Grand Central Dispatch)在多线程开发中的应用,包括其函数和队列的实现细节。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 在 Java 中,`join()` 方法用于使当前线程暂停,直到指定的线程执行完毕后再继续执行。此外,`join(long millis)` 方法允许当前线程在指定的毫秒数后继续执行。 ... [详细]
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
  • ESP32 IRAM 内存优化策略与实践总结
    本文总结了针对ESP32 IRAM内存溢出问题的优化策略与实践经验。通过详细分析ESP32的内存结构和IRAM分配机制,提出了一系列有效的解决方案,包括代码优化、内存管理技巧和编译器配置调整,旨在帮助开发者有效解决`.espressif/tools/xtensa-esp32-elf/esp-2`等类似错误,提升系统性能和稳定性。 ... [详细]
  • 安装过程:(环境:Kubuntu7.10)从其oracle公司官网http:www.oracle.comtechnologysoftwareproduc ... [详细]
  • Linux多线程(2)
    线程的知识点太多,太重要,所以分成三部分进行总结学习线程安全多个线程并发同一段代码时,不会出现不同的结果。常见对全局变量或者静态变量进行操作,并且没有锁保护的情况下,会出现该问题。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • tempimplementsRunnable{}newThread(newtemp()).start();packageTCPUDPThread;***创建线程方式一:* ... [详细]
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社区 版权所有