每 N 毫秒调用一个函数的最准确方法是什么?
我用Thread.sleep修改了这个例子,它不是很准确。
我正在开发一个音乐应用程序,可以在给定的BPM下播放声音。我明白要创造一个完全准确的节拍器是不可能的,我不需要——只是想找到最好的方法。
谢谢
它们在精度方面都是相同的。Java 计时精度受制于系统计时器和调度程序的精度和准确性,不能保证。请参见线程睡眠和对象等待 API。
在Android上,你可以用自己的处理程序/消息队列创建线程。挺准的。当你看到处理程序文档时,你会发现它就是为此而设计的。
处理程序有两个主要用途:(1)将消息和可运行的语句调度为将来的某个点执行;和 (2) 将要在与您自己的线程不同的线程上执行的操作排入队列。
使用计时器有一些缺点
在你的情况下,有两种方法可能是有用的… schduledThreadPoolExector正确地处理了所有这些问题,并且使用Timer是没有意义的……和schduleWithFixedDelay(………)
class MyTask implements Runnable {
@Override
public void run() {
System.out.println("Hello world");
}
}
ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);
long period = 100; // the period between successive executions
exec.scheduleAtFixedRate(new MyTask(), 0, period, TimeUnit.MICROSECONDS);
long delay = 100; //the delay between the termination of one execution and the commencement of the next
exec.scheduleWithFixedDelay(new MyTask(), 0, delay, TimeUnit.MICROSECONDS);
问题内容: 每N毫秒调用一个函数的最准确方法是什么? 具有Thread.sleep的线程 计时器任务 具有postDelayed的处理程序 我使用Thread.sleep 修改了此示例,它不是很准确。 我正在开发一个音乐应用程序,它将以给定的BPM播放声音。我知道创建一个完全准确的节拍器是不可能的,而且我不需要-只是寻找找到最佳的节拍器方法。 谢谢 问题答案: 使用计时器有一些缺点 它仅创建一个线
但是我不能在一个计时器中处理不同的“计时器任务”。我试图将计时器任务对象添加到构造函数中,但是当我将新的计时器任务(RemindTask1)对象作为参数(内部类的实例)传递时,出现编译错误。 以下是它如何处理一项任务: 但是我完全被多个任务应该如何创建然后运行所困扰。 但是这不起作用,我不知道出了什么问题。当我将新的RemindTask2()作为参数传递时,我遇到了编译错误。
假设我想每10秒执行一次操作,它不一定需要更新视图。 问题是:在timertask中使用timer是否更好(我的意思是更高效、更有效): 或者只是一个有延迟的处理程序 此外,如果您能解释什么时候使用哪种方法,以及为什么其中一种方法比另一种更有效(如果确实有效),我将不胜感激。
问题内容: 我正在开发节拍器应用程序。用户可以在运行时选择bpm,我的应用程序将相应地播放“滴答”声。“滴答”是一个节拍器“拍”(mp3)。我尝试使用Handler和MediaPlayer来实现它,但是节拍器一点也不精确。因此,我考虑了更改整个方法:当用户选择新的bpm值时,我通过每N毫秒重复X次滴答声,然后循环遍历此运行时创建的声音来合成新声音。这是有效的替代方法吗?如何在Android中实现?
问题内容: 我正在Windows上的python中进行编程,想准确地测量函数运行所花费的时间。我已经编写了一个函数“ time_it”,该函数需要另一个函数,然后运行它并返回运行时间。 我称其为1000次并取平均值。(最后的1000常数以毫秒为单位给出答案。) 该函数似乎可以正常工作,但是我有一种na不安的感觉,那就是我做错了什么,通过这种方式,我花的时间比函数运行时实际花费的时间更多。 有没有更
问题内容: 我正在尝试每1分钟显示一次味精!不停!我发现一个示例,它在固定延迟后仅显示一次味精!你能帮忙设置吗?或者如果使用计时器更好,我需要一个例子!! 谢谢! 问题答案: 试试这个代码-