首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定时触发器

定时触发器
EN

Stack Overflow用户
提问于 2013-01-30 21:16:40
回答 1查看 159关注 0票数 1

我正在尝试创建一个控制方法,它在单独的线程中执行子方法。我已经了解了NSTimer,但是有几个子方法没有在确切的时间间隔内执行。

以下是五个间隔:

  1. 快速执行-- ~每0.1秒执行一次
  2. 每5分钟执行一次
  3. 每10分钟执行一次
  4. 每小时执行一次
  5. 每天(午夜)执行死刑

间隔1-3应该非常容易用NSTimer来完成.有什么其他的建议吗?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-30 22:40:49

对于(4)和(5),如果dispatch_walltime不够精确,则需要NSTimer

代码语言:javascript
复制
/* timespec for midnight, new years day 2014 */

struct tm time = {
   .tm_sec = 0,
   .tm_min = 0,
   .tm_hour = 0,
   .tm_mday = 1,
   .tm_mon = 1,
   .tm_year = 2014,
   .tm_wday = -1,  // I think -1 is wildcard here, can someone help?
   .tm_yday = -1,
   .tm_isdst = TRUE
};

const struct timespec whenToFire = {
   .tv_sec = mktime(time),
   .tv_nsec = 0
};

dispatch_time_t time = dispatch_walltime(&whenToFire,0);

/* a lower-priority queue may delay firing */    
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT);

dispatch_source_t timeSrc = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 
                                  0, 0, queue);

dispatch_source_set_timer(timeSrc, time, 100000 , 100);

dispatch_source_set_event_handler(timeSrc, ^{   
    /* only run once */
    static dispatch_once_t token;
    dispatch_once(&token, ^{
        /* code to run on New Years Day here */
        dispatch_source_cancel(timeSrc);
    });
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14613960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档