gpt4 book ai didi

objective-c - 定时触发

转载 作者:行者123 更新时间:2023-12-03 17:13:20 25 4
gpt4 key购买 nike

我正在尝试创建一个在单独线程中执行子方法的控制方法。我研究过 NSTimer,但有几个子方法没有在精确的时间间隔内执行。

以下是 5 个间隔:

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

使用 NSTimer 应该很容易完成间隔 1 - 3。对于实现其他的有什么建议吗?

提前致谢!

最佳答案

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

/* 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);
});
});

关于objective-c - 定时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14613960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com