Android 中 C++ Thread线程用法(五十七)

2024-05-08 01:08

本文主要是介绍Android 中 C++ Thread线程用法(五十七),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 1、Android把线程C++封装Thread类,它是线程的基类

 2、使用Thread时,创建一个类继承于Thread类,实现threadLoop()方法是纯虚函数,在子类中实现

 3、启动线程,调用run()函数

class Thread : virtual public RefBase//RefBase封装sp、wp智能指针
{
public:
                        Thread(bool canCallJava = true);
                        virtual             ~Thread();

                         // 启动线程,创建一个新的线程并执行threadLoop()虚函数 

                         virtual status_t    run( const char* name = 0, int32_t priority = PRIORITY_DEFAULT,size_t stack = 0);

                         //退出线程函数(异步) 
                        virtual void        requestExit();

                       /*readyToRun()在Android4.4版本 system/core/libutils/Threads.cpp,

                         在run()函数里的_threadLoop()方法被调用self->readyToRun();初始化线程,

                         之后调用result = self->threadLoop();真正启动线程 */

                        // 可重载此虚函数进行初始化工作,为隐式调用
                        virtual status_t    readyToRun();
    
                       //线程退出(同步)
                        status_t    requestExitAndWait();
protected:
                        // 判断requestExit()是否被调用过 
                        bool        exitPending() const;
    
private:

                        // 线程函数。若此函数返回true,当requestExit()没被调用过时会再次调用此函数;若返回false,
                         在该函数返回时线程将退出

                        virtual bool        threadLoop() = 0;//纯虚函数,在子类中实现

};

举例:

Thread类继承于ReBase虛基类,new一个sp的模板类,会最终调用该类对象对Refbase重载的onFirstRef();
  例如: sp<MainThread> mMainThread; //成员变量;智能指针sp<char> == char *等价
      mMainThread = newMainThread();//new 一个sp的模板类赋值给成员变量mMainThread
     虛基类Refbase()中的onFirstRef()方法被调用,此时run()反方发被调用,线程启动,调用threadLoop()不停循环执行。

class MainThread : public Thread {
public:
    MainThread();
    virtual  ~MainThread();
    virtual void onFirstRef() 

    {

        run("MainThread", PRIORITY_DEFAULT);
    }
    virtual status_t  readyToRun();
    virtual bool threadLoop();
    virtual void     requestExit();
    void requestLock();

private:
    sp<MainThread> mMainThread;
  
};

这篇关于Android 中 C++ Thread线程用法(五十七)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968893

相关文章

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro