gpt4 book ai didi

ios - 在 macOS 中创建 C 定时器

转载 作者:行者123 更新时间:2023-12-02 03:08:32 24 4
gpt4 key购买 nike

我想知道如何在 macOS/iOS 中创建计时器。在linux中你可以使用time.h类的timer_create()函数来创建它,但在macOS/iOS中这个函数不存在。

类似于 NSTimer (objective-c),但使用 C 语言。

谢谢

最佳答案

更新 Grand Central Dispatch 的链接后计时器(Apple's page)在之前的答案中,我为两个计时器创建了一些示例代码。应该注意的是,这适用于 FreeBSD 和 MacOS,但不适用于 Linux(没有 GCD 支持)。该示例创建了两个事件计时器,一个触发 0.2 秒,另一个触发 0.5 秒,总共触发 20 次。执行开始之前有 1 秒的延迟。不使用 sleep() 函数。

#include <dispatch/dispatch.h>
#include <stdio.h>
#include <stdlib.h>

int i = 0;
dispatch_queue_t queue;
dispatch_source_t timer1;
dispatch_source_t timer2;


void sigtrap(int sig)
{
dispatch_source_cancel(timer1);
dispatch_source_cancel(timer2);
printf("CTRL-C received, exiting program\n");
exit(EXIT_SUCCESS);
}

void vector1(dispatch_source_t timer)
{
printf("a: %d\n", i);
i++;
if (i >= 20)
{
dispatch_source_cancel(timer);
}
}
void vector2(dispatch_source_t timer)
{
printf("b: %d\n", i);
i++;
if (i >= 20) //at 20 count cancel the
{
dispatch_source_cancel(timer);
}
}

int main(int argc, const char* argv[]) {

signal(SIGINT, &sigtrap); //catch the cntl-c
queue = dispatch_queue_create("timerQueue", 0);

// Create dispatch timer source
timer1 = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
timer2 = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);

// Set block for dispatch source when catched events
dispatch_source_set_event_handler(timer1, ^{vector1(timer1);});
dispatch_source_set_event_handler(timer2, ^{vector2(timer2);});

// Set block for dispatch source when cancel source
dispatch_source_set_cancel_handler(timer1, ^{
dispatch_release(timer1);
dispatch_release(queue);
printf("end\n");
exit(0);
});
dispatch_source_set_cancel_handler(timer2, ^{
dispatch_release(timer2);
dispatch_release(queue);
printf("end\n");
exit(0);
});

dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC); // after 1 sec

// Set timer
dispatch_source_set_timer(timer1, start, NSEC_PER_SEC / 5, 0); // 0.2 sec
dispatch_source_set_timer(timer2, start, NSEC_PER_SEC / 2, 0); // 0.5 sec
printf("start\n");
dispatch_resume(timer1);
dispatch_resume(timer2);
while(1)
{
;;
}
return 0;
}

关于ios - 在 macOS 中创建 C 定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44807302/

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