当前位置: 首页 > news >正文

android关于native中Thread类的使用

文章目录

  • 简要概述
  • 代码记录

简要概述

简单记录android中native关于thread的使用
源码位置:

system\core\libutils\include\utils\Thread.h
system\core\libutils\Threads.cppclass Thread : virtual public RefBase
Thread继承RefBase,有以下的一些特性
// Invoked after creation of initial strong pointer/reference.
virtual void            onFirstRef();

代码记录

main.cpp

#include <utils/Log.h>
#include <pthread.h>
#include "TestThread.h"
#ifdef LOG_TAG
#undef LOG_TAG
#endif
#define LOG_TAG "hello_test"
using namespace android;int main(int args,char** argv) {ALOGD("main start TestThread");// TestThreadsp<TestThread> testThread = new TestThread;testThread->run("TestThread", PRIORITY_URGENT_DISPLAY);while(1){if(!testThread->isRunning()){break;}}ALOGD("main end");return 0;
}

Android.bp

cc_binary{name:"hello_test",srcs:["main.cpp","TestThread.cpp",],shared_libs:["liblog","libutils",],cflags: ["-Wno-error","-Wno-unused-parameter",],
}

TestThread.h

//
// Created by xxx on 25-6-8.
//#ifndef ANDROID_TESTTHREAD_H
#define ANDROID_TESTTHREAD_H
#include <utils/threads.h>
#include <utils/Log.h>namespace android {class TestThread : public Thread {public:TestThread();virtual void        onFirstRef();virtual status_t    readyToRun();virtual bool        threadLoop();virtual void        requestExit();private:int cnt = 0;};
}
#endif //ANDROID_TESTTHREAD_H

TestThread.cpp

//
// Created by xxx on 25-6-8.
//
#include "TestThread.h"
namespace android{TestThread::TestThread():Thread(false) {ALOGD("TestThread");}void TestThread::onFirstRef(){ALOGD("onFirstRef");}status_t  TestThread::readyToRun(){ALOGD("readyToRun");return OK;}bool TestThread::threadLoop() {cnt++;ALOGD("threadLoop cnt = %d",cnt);if(cnt >= 20){return false;}return true;}void  TestThread::requestExit(){ALOGD("requestExit");}}

日志打印如下所示

06-14 22:29:28.500  2094  2094 D hello_test: main start TestThread
06-14 22:29:28.500  2094  2094 D hello_test: TestThread
06-14 22:29:28.500  2094  2094 D hello_test: onFirstRef
06-14 22:29:28.501  2094  2096 D hello_test: readyToRun
06-14 22:29:28.502  2094  2096 D hello_test: threadLoop cnt = 1
...
06-14 22:29:28.505  2094  2096 D hello_test: threadLoop cnt = 20
06-14 22:29:28.505  2094  2094 D hello_test: main end

函数执行顺序 TestThread->onFirstRef->readyToRun->threadLoop

http://www.dtcms.com/a/249630.html

相关文章:

  • C++ 环境配置
  • Visual studio 中 使用QT插件 编辑UI文件打开 Qt Designer 报错 问题解决方案
  • 论文精读Lami-Detr:Open-Vocabulary Detection with Language Model Instruction
  • 【量化】策略交易之动量策略(Momentum)
  • YOLOv2 中非极大值抑制(NMS)机制详解与实现
  • n8n 从 Docker 到 Node.js 本地环境迁移指南
  • Qt .pro配置gcc相关命令(三):-W1、-L、-rpath和-rpath-link
  • std::shared_ptr引起内存泄漏的例子
  • [CVPR 2025] DeformCL:基于可变形中心线的3D血管提取新范式
  • AI应用:计算机视觉相关技术总结
  • 蓝桥杯国赛前一晚知识点准备(十六届python)
  • 灵敏度分析
  • Codeforces Round 1030 (Div. 2)
  • STM32项目---汽车氛围灯
  • Flutter JSON解析全攻略:使用json_serializable实现高效序列化
  • MySQL 调优笔记
  • 项目拓展-简易SQL监控,P6SPY拦截所有jdbc连接并打印执行SQL
  • 第1章 C# 和 .NET 框架 笔记
  • 【知识图谱构建系列3】zero-shot的理念介绍
  • Android xml的Preference设置visibility=“gone“ 无效分析解决
  • 【无标题】【2025年软考中级】第三章数据结构3.2 栈与队列
  • LeetCode - 69. x 的平方根
  • 数据结构 学习 链表 2025年6月14日08点01分
  • 力扣Hot100每日N题(15~16)
  • sqli-labs靶场46-53关(综合)
  • 拆解 CMS/G1/ZGC 三种垃圾回收器算法过程
  • Python实战应用-Python操作MySQL数据库
  • leetcode2-两数相加
  • 【CF】Day84——Codeforces Round 862 (Div. 2) D (⭐树的直径的性质 + DFS找树的直径)
  • K8S中使用英伟达GPU