使用时
Timer.schedule(TimerTask task, long delay, long period)
(即具有固定延迟执行),如果指定TimerTask的run()方法花费的时间超过period完成时会发生什么?是否有可能TimerTask因为这个而运行两个并发线程?如果是这样,有没有办法避免它?
我有一个使用从10开始倒计时的CountDownTimer的活动.当活动不再处于焦点时如何暂停该计时器,如用户接到电话或其他内容,然后在用户返回时恢复计时器活动?这甚至可能吗?
我正在使用Angular 5.
我想知道如何在按下"播放"按钮时开始计时,以便知道自我点击后已经过了多少时间.
我还想知道是否可以停止计时器,然后能够在之前的同一时间继续.
我终于用Pardeep Jain的答案解决了我的问题.虽然这不是我想要的.我不想倒计时,我想计算持续时间.这是我最后使用的代码:
time: number = 0;
interval;
startTimer() {
this.play = true;
this.interval = setInterval(() => {
this.time++;
},1000)
}
pauseTimer() {
this.play = false;
clearInterval(this.interval);
}
Run Code Online (Sandbox Code Playgroud) 我目前正在C#中编写一个简单的,基于计时器的迷你应用程序,每隔k秒执行n次动作.
我正在尝试采用测试驱动的开发风格,因此我的目标是对应用程序的所有部分进行单元测试.
所以,我的问题是:有没有一种好的方法来对基于计时器的类进行单元测试?
正如我所看到的那样,问题在于,测试执行时需要花费很大的时间,因为他们必须等待这么长时间才能完成所需的操作.
特别是如果想要实际数据(秒),而不是使用框架允许的最小时间分辨率(1毫秒?).
我正在使用模拟对象来执行操作,以记录操作被调用的次数,以便操作几乎没有时间.
我需要在linux下以1ms的分辨率打开计时器.它用于递增计时器值,而计时器值又用于查看是否应触发各种事件.由于glibc要求,POSIX timerfd_create不是一个选项.我尝试过timer_create和timer_settimer,但我从它们得到的最好的是10ms的分辨率,较小的值似乎默认为10ms的分辨率.根据联机帮助页,Getittimer和setitimer的分辨率为10毫秒.
我现在可以想到的唯一一种做这个计时器的方法是在我的主循环中使用带有CLOCK_MONOTONIC的clock_gettime,如果ms已经通过则测试,如果是,则增加计数器(然后检查是否应该触发各种事件).
有没有比在主循环中不断查询更好的方法呢?推荐的解决方案是什么?
我使用的语言很简单
更新
我使用的是2.6.26内核.我知道你可以在1kHz时中断它,然后POSIX timer_*函数可以编程为1ms,但这似乎不可靠,我不想使用它,因为它可能需要一些新内核系统.一些库存内核似乎仍然配置了100Hz.我需要检测到这一点.该应用程序可能运行在我的系统以外的其他东西:)
我无法入睡1ms因为可能有网络事件我必须做出反应.
我如何解决它 因为它并不重要我只是宣称全局计时器的分辨率为100ms.使用自己的计时器的所有事件必须设置至少100毫秒的计时器到期.我或多或少想知道是否会有更好的方法,因此问题.
为什么我接受了答案 我认为自由空间的答案最好地描述了为什么没有实时Linux系统它是不可能的.
对于我的Android应用程序,有一个计时器可以测量已经过了多长时间.在100毫秒内,我用一些文本更新了我的TextView,例如"得分:10时间:100.10秒".但是,我发现TextView仅在前几次更新.该应用程序仍然非常敏感,但标签不会更新.我试图调用.invalidate(),但它仍然无效.我不知道是否有某种方法可以解决这个问题,或者使用更好的小部件.
以下是我的代码示例:
float seconds;
java.util.Timer gametimer;
void updatecount() { TextView t = (TextView)findViewById(R.id.topscore);
t.setText("Score: 10 - Time: "+seconds+" seconds");
t.postInvalidate();
}
public void onCreate(Bundle sis) {
... Load the UI, etc...
gametimer.schedule(new TimerTask() { public void run() {
seconds+=0.1; updatecount();
} }, 100, 100);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用计时器来安排应用程序中的重复事件.但是,我希望能够实时调整事件触发的时间段(根据用户输入).
例如:
public class HelperTimer extends TimerTask
{
private Timer timer;
//Default of 15 second between updates
private int secondsToDelay = 15;
public void setPeriod(int seconds)
{
this.secondsToDelay = seconds;
long delay = 1000; // 1 second
long period = 1000*secondsToDelay; // seconds
if (timer != null)
{
timer.cancel();
}
System.out.println(timer);
timer = new Timer();
System.out.println(timer);
timer.schedule(this, delay, period);
}
public int getPeriod()
{
return this.secondsToDelay;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我启动这个类的新实例并调用它的set period函数.但是,当我这样做时,我得到一个非法状态异常.你可以看到System.out.println(计时器); 在那里,因为我正在检查,并且确实,他们是两个不同的计时器...所以当我尝试在一个全新的Timer实例上运行计划调用时,为什么我会收到IllegalStateException!?!?!?!
java.util.Timer@c55e36
java.util.Timer@9664a1
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Task already …Run Code Online (Sandbox Code Playgroud) 我正在为网站开发自动搜索功能.
它使用ajax来查询api.
在输入3个字符后,它将在每次按键时搜索.
我想要的是
案例1:
用户输入测试
2秒后执行搜索
情况2:
用户输入测试
1秒通过
用户按t
2秒
测试通过搜索
案例3:
用户输入测试
1秒通过
用户按下t
1.5秒通过
用户按下i
1.5秒通过
用户按下n
1.5秒通过
用户按g
2秒通过
搜索执行测试
如您所见,搜索操作仅在按键后两秒内没有按键(或粘贴等)时执行.
我的基本想法是.
on keydown调用一个设置超时的函数,该函数还设置一个包含文本框中最后一个条目的变量.当超时到期时,它会检查框中的值以查看它是否与变量中的值匹配.
如果匹配则没有变化.搜索也是如此
如果他们不做任何事情,因为后续按键的超时将跟随进行相同的检查.
这是唯一/最好的方法吗?
我有一个Windows服务,我想在每10秒钟创建一个文件.
我得到了很多评论,Windows服务中的Timer将是最好的选择.
我怎样才能做到这一点?
我是新手IOS开发人员,但我在Android开发方面有很多经验.我的问题是关于间隔特定计时器的创建和使用.
在android中我可以轻松制作这样的计时器:
timedTimer = new Timer();
timedTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
TimedMethod();
}
}, 0, 1000);
Run Code Online (Sandbox Code Playgroud)
如果间隔为1000 MS,则在每个tick上调用TimedMethod()方法.我如何在IOS中实现类似的功能?
非常感谢您的阅读!任何帮助都会很棒!:-)