标签: timer

C#中的System.Threading.Timer似乎无法正常工作.它每3秒运行一次非常快

我有一个计时器对象.我想让它每分钟都运行一次.具体来说,它应该运行一个OnCallBack方法,并在OnCallBack方法运行时变为非活动状态.一旦OnCallBack方法完成,它(a OnCallBack)重新启动计时器.

这就是我现在所拥有的:

private static Timer timer;

private static void Main()
{
    timer = new Timer(_ => OnCallBack(), null, 0, 1000 * 10); //every 10 seconds
    Console.ReadLine();
}

private static void OnCallBack()
{
    timer.Change(Timeout.Infinite, Timeout.Infinite); //stops the timer
    Thread.Sleep(3000); //doing some long operation
    timer.Change(0, 1000 * 10);  //restarts the timer
}
Run Code Online (Sandbox Code Playgroud)

但是,似乎没有用.它每3秒运行一次非常快.即使提高了一段时间(1000*10).它似乎对此视而不见1000 * 10

我做错了什么?

.net c# timer

109
推荐指数
3
解决办法
15万
查看次数

在Windows服务中使用的最佳计时器

我需要创建一些Windows服务,每隔N段执行一次.
问题是:
我应该使用哪个定时器控件:System.Timers.Timer或者System.Threading.Timer一个?它对某些事物有影响吗?

我问,因为我听到许多证据表明System.Timers.TimerWindows服务中的工作不正确.
谢谢.

c# windows-services timer

108
推荐指数
3
解决办法
18万
查看次数

如何在C#中重置计时器?

有三个Timer,我知道的课程,System.Threading.Timer,System.Timers.Timer,和System.Windows.Forms.Timer,但这些都没有一个.Reset()这将当前经过时间重置为0功能.

有没有这个功能的BCL类?这样做有非破解方法吗?(我想也许改变它的时间限制可能会重置它)考虑重新实现Timer具有此功能的类有多难,或者如何使用其中一个BCL类可靠地执行它?

c# timer

108
推荐指数
5
解决办法
16万
查看次数

Timer中的Timer&TimerTask与Thread + sleep

我在这里发现了类似的问题,但没有我满意的答案.所以再次重述这个问题 -

我有一项需要定期完成的任务(比如每隔1分钟).使用Timertask&Timer执行此操作的优势是什么,而不是创建一个具有无限循环睡眠的新线程?

使用timertask-的代码段 -

TimerTask uploadCheckerTimerTask = new TimerTask(){

 public void run() {
  NewUploadServer.getInstance().checkAndUploadFiles();
 }
};

Timer uploadCheckerTimer = new Timer(true);
uploadCheckerTimer.scheduleAtFixedRate(uploadCheckerTimerTask, 0, 60 * 1000);
Run Code Online (Sandbox Code Playgroud)

使用Thread和sleep的代码片段 -

Thread t = new Thread(){
 public void run() {
  while(true) {
   NewUploadServer.getInstance().checkAndUploadFiles();
   Thread.sleep(60 * 1000);
  }
 }
};
t.start();
Run Code Online (Sandbox Code Playgroud)

如果逻辑执行时间超过间隔时间,我真的不必担心是否会错过某些周期.

请评论这个..

更新:
最近我发现使用Timer与Thread.sleep()之间存在另一个区别.假设当前系统时间是上午11:00.如果由于某种原因我们将系统时间回滚到上午10:00,则计时器将停止执行任务,直到它到达上午11:00,而Thread.sleep()方法将继续执行任务而不受阻碍.这可能是决定在这两者之间使用什么的主要决策者.

java sleep timer task while-loop

103
推荐指数
4
解决办法
10万
查看次数

如何每X秒运行一次方法

我正在开发一个Android 2.3.3应用程序,我需要每隔X秒运行一个方法.

在iOS中,我有NSTimer,但在Android中我不知道该使用什么.

有人推荐我Handler ; 另一个推荐我AlarmManager,但我不知道哪种方法更适合NSTimer.

这是我想在Android中实现的代码:

timer2 = [
    NSTimer scheduledTimerWithTimeInterval:(1.0f/20.0f)
    target:self
    selector:@selector(loopTask)
    userInfo:nil
    repeats:YES
];

timer1 = [
    NSTimer scheduledTimerWithTimeInterval:(1.0f/4.0f)
    target:self
    selector:@selector(isFree)
    userInfo:nil
    repeats:YES
];
Run Code Online (Sandbox Code Playgroud)

我需要一些像NSTimer一样的东西.

你推荐我什么?

android timer nstimer

102
推荐指数
6
解决办法
14万
查看次数

定时器功能使用C++以纳秒为单位提供时间

我希望计算API返回值所花费的时间.这种行动所花费的时间是纳秒秒.由于API是C++类/函数,我使用timer.h来计算相同的:

  #include <ctime>
  #include <cstdio>

  using namespace std;

  int main(int argc, char** argv) {

      clock_t start;
      double diff;
      start = clock();
      diff = ( std::clock() - start ) / (double)CLOCKS_PER_SEC;
      cout<<"printf: "<< diff <<'\n';

      return 0;
  }
Run Code Online (Sandbox Code Playgroud)

上面的代码给出了以秒为单位的时间.如何在毫秒秒内获得相同的精度?

c c++ timer

101
推荐指数
8
解决办法
20万
查看次数

C++在Linux上获得毫秒时间 - clock()似乎无法正常工作

在Windows上,clock()以毫秒为单位返回时间,但是在我正在处理的这个Linux机器上,它将它舍入到最接近的1000,因此精度仅为"秒"级别而不是毫秒级别.

我找到了一个使用QTime该类的Qt解决方案,实例化一个对象并调用start()它然后调用elapsed()以获得经过的毫秒数.

我有点幸运,因为我开始使用Qt,但我想要一个不依赖第三方库的解决方案,

有没有标准的方法来做到这一点?

UPDATE

请不要推荐Boost ..

如果Boost和Qt可以做到这一点,那肯定不是魔术,必须有他们正在使用的标准!

c++ timer clock

100
推荐指数
6
解决办法
26万
查看次数

将Timer与DispatcherTimer进行比较

是什么区别between System.Windows.Forms.Timer()System.Windows.Threading.DispatcherTimer()?在哪些情况下,我们应该使用它们?任何最佳做法?

c# timer

97
推荐指数
2
解决办法
6万
查看次数

Timertask或Handler

假设我想每10秒执行一次操作,并不一定需要更新视图.

问题是:使用带有timertask的计时器是否更好(我的意思是更有效率和更有效),如下所示:

final Handler handler = new Handler();

TimerTask timertask = new TimerTask() {
    @Override
    public void run() {
        handler.post(new Runnable() {
            public void run() {
               <some task>
            }
        });
    }
};
timer = new Timer();
timer.schedule(timertask, 0, 15000);
}
Run Code Online (Sandbox Code Playgroud)

或者只是一个带有postdelayed的处理程序

final Handler handler = new Handler(); 
final Runnable r = new Runnable()
{
    public void run() 
    {
        <some task>
    }
};
handler.postDelayed(r, 15000);
Run Code Online (Sandbox Code Playgroud)

如果您能解释何时使用哪种方法以及为什么其中一种方法比另一种方法更有效(如果它实际上是这样),我将不胜感激.

performance android timer handler timertask

96
推荐指数
3
解决办法
6万
查看次数

控制台应用程序中的可靠计时器

我知道在.NET中有三种计时器类型(请参阅比较.NET Framework类库中的计时器类).我选择了一个线程计时器,因为如果主线程繁忙,其他类型可能会漂移,我需要这个是可靠的.

此计时器在计时器控制中的工作方式是放在另一个线程上,因此它可以随时在父线程不忙时在工作开始时完成.

控制台应用程序中此计时器的问题是,当计时器正在另一个线程上时,主线程没有对应用程序执行任何操作.

我尝试添加while true循环,但是当计时器关闭时主线程太忙了.

.net c# vb.net timer

94
推荐指数
2
解决办法
6466
查看次数

标签 统计

timer ×10

c# ×5

.net ×2

android ×2

c++ ×2

c ×1

clock ×1

handler ×1

java ×1

nstimer ×1

performance ×1

sleep ×1

task ×1

timertask ×1

vb.net ×1

while-loop ×1

windows-services ×1