首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Android本机代码中获得高分辨率定时器?

如何在Android本机代码中获得高分辨率定时器?
EN

Stack Overflow用户
提问于 2013-02-20 00:33:07
回答 2查看 9.1K关注 0票数 7

我正在寻找一种方法,以获得高分辨率定时器(时钟源)上的Android。这必须是在本机代码,并可能是相当不可移植的。我想要微秒分辨率,或者更好。对于我的特殊应用,分辨率比精度更重要,而单调的计时器是最好的。我一直在使用Android4.0.3在一个特定的ARMv7芯片组上进行测试。

到目前为止我尝试过的是:

  • clock_gettime(CLOCK_MONOTONIC):在目标硬件上以1ms为单位递增(编辑最初以为是10 is,因为我的代码中有错误,1ms是正确的,但仍然不是很好)
  • gettimeofday():类似于clock_gettime

我没试过的是:

  • System.nanoTime():这不是原生的。我相信它是基于clock_gettime()的,但是我更愿意找出隐藏的东西,并直接使用它。
  • /dev/rtc
  • 某种ARM指令/设备,可能是SysTick (ARM.pdf)或通用计时器(GPT)。

另见(相关问题,但没有答案):

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-21 06:20:15

您可以使用CPU周期计数器来测量这两个时刻之间的周期数,然后将其转换为秒。为了保证CPU以其正常频率运行,可以将它的调速器切换到“性能”模式(在Play存储中有许多应用程序可以这样做,但是需要根访问)。您还必须冷却您的设备,以确保CPU没有节流(这是特别重要的手机)。最后,您必须将代码绑定到单个核心(最好是核心0,因为系统可以将其他内核脱机)。

访问ARM上的循环计数器有两种方法:在Linux中使用perf_event子系统或直接从CP15协处理器读取循环计数器。只有在编译了Linux内核并支持此子系统(文件/proc/sys/内核/perf_ perf_event _paranoid存在)并且读取事件计数器不受限制时,才能使用Linux方法(文件/proc/sys/ work /perf_ event _paranoid包含0或-1;通过根访问,您可以覆盖该文件中的值)。只有在启用了对性能计数器的用户模式访问时,CP15方法才能工作(默认情况下,它总是禁用的,您必须修补内核或使用内核驱动程序来启用它)。耶普!图书馆 (我是作者)能够在任何可用的情况下使用任何一种方法,并包括一个内核模式驱动程序,以启用用户模式对性能计数器的访问。您可能会发现这个例子很有用。

票数 6
EN

Stack Overflow用户

发布于 2013-02-21 00:12:19

  1. Android不支持ARMv7-M,所以so已经不适用了。
  2. 我对android/linux中的计时器没有真正的经验,如果你要在你自己的设备上运行这个软件,你可以在linux上启用PMU,并使用CPU的循环计数寄存器来获得接近纳秒的精度。如果您打算发布您的软件或将其提供给某些终端使用者,这是不可取的,因为制造商在不同的设备上有不同的内核配置,因此PMU可能无法启用/可用。

编辑:您还可以查看https://groups.google.com/forum/?fromgroups=#!topic/android-ndk/dgrqhgHWbHI和clock_getres()以检查clock_gettime()的分辨率

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14975349

复制
相关文章
CA1012:抽象类型不应具有公共构造函数
抽象类型的构造函数只能由派生类型调用。 由于公共构造函数可创建类型的实例,但无法创建抽象类型的实例,因此具有公共构造函数的抽象类型在设计上是错误的。
用户4268038
2022/01/10
5040
CA1053:静态容器类型不应具有默认构造函数
规则 CA1053 仅适用于旧版 Visual Studio 代码分析。 在 .NET 代码质量分析器中,该规则已合并到规则 CA1052:静态容器类型应为 Static 或 NotInheritable 中。
呆呆
2022/01/10
4240
Javascript面向对象编程(三):非构造函数的继承
这个系列的第一部分介绍了"封装",第二部分介绍了使用构造函数实现"继承"。 今天是最后一个部分,介绍不使用构造函数实现"继承"。 一、什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人"。   var Chinese = {     nation:'中国'   }; 还有一个对象,叫做"医生"。   var Doctor ={     career:'医生'   } 请问怎样才能让"医生"去继承"中国人",也就是说,我怎样才能生成一个"中国医生"的对象? 这里要注意,这两个
ruanyf
2018/04/12
1.3K0
C++构造函数 | 构造函数
C++在建立一个对象时,常常需要作某些初始化,如果一个数据成员未被赋值,则它的值是不可预知的,因为在系统为它分配内存时,保留了这些存储单元的原状,这就成为了这些数据成员的初始值,在C++中,对象是一个实体,它反映了客观事物的属性,是应该有确定的值的。
小林C语言
2021/01/26
2.2K0
C++构造函数 | 构造函数
【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )
1 . 构造函数个数 : Kotlin 类定义时需要指定主构造函数 , 还可以指定 0 ~ 多个次构造函数 ;
韩曙亮
2023/03/27
4.2K0
【C++】构造函数调用规则 ( 默认构造函数 | 默认无参构造函数 | 默认拷贝构造函数 | 构造函数调用规则说明 )
如果 C++ 类中 没有定义构造函数 , C++ 编译器会自动为该类提供一个 " 默认的无参构造函数 " , 函数体为空 , 不做任何操作 ;
韩曙亮
2023/10/15
1.3K0
【C++】构造函数调用规则 ( 默认构造函数 | 默认无参构造函数 | 默认拷贝构造函数 | 构造函数调用规则说明 )
js 中的构造函数,构造函数作用,构造函数和普通函数的区别
函数的定义方式: 1.声明式函数定义: function 函数名 (){};这种定义方式,会将函数声明提升到该函数所在作用域的最开头,也是就无论你在这个函数的最小作用域的那儿使用这种方式声明的函数,在这个作用域内,你都可以调用这个函数为你所用。 2.函数表达式:let fun = function(){}; 此方式定义的函数,只能在该作用域中,这段赋值代码执行之后才能通过fun()调用函数,否则,由于变量声明提升,fun === undefined。 3.new Function 形式: var fun1 = new Function (arg1 , arg2 ,arg3 ,…, argN , body );Function构造函数所有的参数都是字符串类型。除了最后一个参数, 其余的参数都作为生成函数的参数即形参。这里可以没有参数。最后一个参数, 表示的是要创建函数的函数体。
全栈程序员站长
2022/10/04
3.5K0
【C++】构造函数分类 ① ( 构造函数分类简介 | 无参构造函数 | 有参构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用 )
无参构造函数 : 只负责为指针类型的成员变量分配内存 , 并赋值一个初始值 , 没有具体的赋值信息 , 该初始化只能为 成员变量 赋值一个默认值 ;
韩曙亮
2023/10/15
4690
【C++】构造函数分类 ① ( 构造函数分类简介 | 无参构造函数 | 有参构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用 )
JavaScript非构造函数的继承( object()方法、浅拷贝与深拷贝 )
这里的 object() 函数,就是把子对象的 prototype 属性,指向父对象,从而使得子对象与父对象连在一起。
Leophen
2019/08/23
6620
java构造函数方法声明无效_如何构造函数
Java构造函数,也叫构造方法,是JAVA中一种特殊的函数。与函数名相同,无返回值。
全栈程序员站长
2022/10/05
1.7K0
javascript构造函数
我们昨天前几天讨论过构造函数constructor,得出了结论 constructor是原型对象上的一个属性,默认指向这个原型的构造函数 这个结论貌似对我们平时的工作中似乎并没有什么用处,那构造函数,就真的没什么用处吗?
陌上寒
2019/04/02
1K0
javascript构造函数
[ Java学习基础 ] Java构造函数
   构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用。 Java构造方法的特点如下: 构造方法名必须与类名相同。 构造方法没有任何返回值,包括void。 构造方法只能与new运算符结合使用。 示例代码如下: 1 //Rectangle.java文件 2 package com.a51work6; 3 4 // 矩形类 5 public class Rectangle { 6 7 // 矩形宽度 8 int wi
Kevin_Zhang
2018/05/22
1.3K0
何为构造函数
Java构造函数,也叫构造方法,是Java中一种特殊的函数。函数名与对应类名相同,无返回值。
JanYork_简昀
2022/03/29
7930
何为构造函数
Javascript构造函数
     构造函数注意事项: 1.默认函数首字母大写 2.构造函数并没有显示返回任何东西。new 操作符会自动创建给定的类型并返回他们,当调用构造函数时,new会自动创建this对象,且类型就是构造函数类型。 3.也可以在构造函数中显示调用return.如果返回的值是一个对象,它会代替新创建的对象实例返回。如果返回的值是一个原始类型,它会被忽略,新创建的实例会被返回。 function Person( name){                 this.name =name;            
hbbliyong
2018/03/06
1.4K0
Javascript构造函数
复制构造函数
生成一个对象的副本有两种途径——第一种途径是建立一个新的对象,然后将一个已有对象的数据成员值取出来,赋值给新的对象。这样做虽然可行 但是实在是太麻烦了。而接下来,向大家介绍 复制构造函数 ——它的作用就是用一个已有的对象,来执行一个新的对象的构造。
小飞侠xp
2022/03/23
8460
工厂函数和构造函数
工厂模式是一种设计模式,说白了就是一种简单的函数,这个函数可以创建对象,为它添加属性和方法,然后返回这个对象。就像一个工厂一样,可以批量制作某种类型的对象。这种设计模式是就是为了降低代码冗余。
大熊G
2022/11/14
7410
[Kotlin] 构造函数总结
主构造函数 // Kotlin 的构造函数可以写在类头中,跟在类名后面。 // 这种写法声明的构造函数,我们称之为主构造函数。 class Person(private val name: String) { fun sayHello() { // 主构造函数中声明的参数,它们默认属于类的公有字段。 println("hello $name") } } // 与上面的作用一致:声明主构造函数 class Person constructor(private v
用户3702315
2021/03/30
1.1K0
java构造函数调用另一个构造函数_java中的构造函数
* 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法
用户7886150
2021/04/29
4.5K0
【Kotlin】类的初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数中定义成员属性 | 次构造函数 | 构造函数默认参数 )
在 Kotlin 类中 , 可以在 类声明 时 在 类名后 定义 " 主构造函数 " ;
韩曙亮
2023/03/30
4.9K0
C++构造函数语义(合成默认构造函数)
       在初学C++的时候,对于一个对象来说,如果我们没有去定义其默认构造函数,那么编译器就会为我们自动生成一个默认构造函数。但其实是不准确的,具体来说是编译器会在必要的时候来生成一个默认构造函数,那么这个编译器生成的默认构造函数称为合成默认构造函数。那么在以下四种情况中编译器才会生成一个合成默认构造函数:
Ch_Zaqdt
2020/03/09
1.4K0

相似问题

带有Php Mysql的Css多级垂直菜单

13

用PHP和MYSQL实现响应式垂直多级菜单

111

如何添加垂直菜单PHP

13

PHP MySQL垂直表

22

PHP MySQL Wordpress菜单

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文