iPhone iOS如何用特定的开火时间初始化GCD调度计时器?

时间:2013-05-10 13:45:23

标签: iphone ios objective-c timer grand-central-dispatch

我希望在特定时间在下面的代码中启动计时器,但找不到用我想要的时间实例化dispatch_time_t的方法。我特别不确定如何让mach_absolute_time初始化延迟。

我看到了一些关于如何在一定延迟后初始化dispatch_time_t的答案:

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);

这不是我需要的。

这就是我想要做的事情:

  • 以毫秒为单位获取当前时间。
  • 摆脱毫秒部分。
  • 添加一秒
  • 添加20毫秒。
  • 使用该时间创建dispatch_time_t
  • 将其传递给计时器

这样我想让我的计时器在每秒+ 20毫秒开始可预测的发射并在可预测的时间重复。我怎样才能做到这一点?

这是我当前的调度计时器代码

backgroundQueue = dispatch_queue_create("com.eeg.bgqueue", DISPATCH_QUEUE_SERIAL);

    synchronizeTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, backgroundQueue);
//I want to specify when the timer will fire
    dispatch_source_set_timer(synchronizeTimer, DISPATCH_TIME_NOW, NSEC_PER_MSEC * updateIntervalms/2.0, NSEC_PER_MSEC * 0);
    dispatch_source_set_event_handler(synchronizeTimer, ^
                                      {

                                             // do your processing here
                                           [activeConnection sendNetworkPacketThreadSafe:[circularArray objectAtIndex:lastArrayIndex]];



                                      });

1 个答案:

答案 0 :(得分:1)

听起来你想要一个基于wallclock的计时器而不是基于mach_absolute_time的计时器。

请参阅dispatch_walltime(3)的联机帮助页,该基本时间可根据struct timespec的结果按照您的要求配置gettimeofday(2)个基准时间。