我试图在处理草图中获得准确的时钟,而没有draw()
函数引起的计时。
我实际上是使用Java的System.nanoTime()
而不是mills()
来获得纳秒级的,我想起了void draw中的时钟来初始化它。
我想知道如何从draw()
获得一个独立的时钟来发送一些消息,而无需使用draw()
函数计时。
我需要它用于android内部的音乐音序器,我需要它完全准确。
这是我的情况:
long lasttimecheck;
long timeinterval;
void setup() {
lasttimecheck = System.nanoTime();
//step duration
timeinterval = 125000000L;
}
void clock(){
if (System.nanoTime() > lasttimecheck + timeinterval) {
lasttimecheck = System.nanoTime();
println("yeah" + lasttimecheck);
}
}
void draw() {
clock();
}
谢谢!
答案 0 :(得分:1)
我不确定您的目标是什么(或者为什么draw()
功能无法实现该目标),但是您可以创建自己的线程并执行自己的计时。像这样:
void setup(){
new Thread(){
public void run(){
while(true){
doTheThing();
Thread.sleep(1); //sleep for 1 ms
}
}
}.start();
}
这只是一个简单的示例,线程(又名并发)是一个高级主题,需要考虑很多复杂的东西。因此,如果我是您,我会退后一步,尝试在常规draw()
循环的范围内工作,而不是自己进行线程化。
答案 1 :(得分:1)
处理提供了一个简单的线程实现:您可以在 setup()中简单地调用 thread(“ clock”); ,而无需担心任何线程模板代码。
或者,当每秒125000000ns = 0.125s = 8次时,您可以在 setup()中通过以下方式将帧速率设置为64:
frameRate(64)
...并通过在 draw()循环中添加以下内容,执行打算使 clock()触发每八帧的操作:
if (frameCount % 8 == 0) {do()}
在64fps下,每八帧以0.125s的增量发生。