在Windows中,OS X上的SetTimer是否有任何等效功能?我正在使用C ++。
所以我正在为一些软件编写一个插件,我需要定期调用一个函数。在Windows上,我只是将函数的地址传递给SetTimer(),它将以给定的间隔调用。 在OS X上有一个简单的方法吗? 它应该尽可能简约。我在网上找不到任何不合适的东西,有一个关于庞大框架的东西,另一个解决方案是使用另一个正在休息的第二个线程,但我认为应该有一个更简单的方法。
答案 0 :(得分:4)
在Cocoa中,典型的调用是这样的;
NSTimer *repeatingTimer= [NSTimer scheduledTimerWithTimeInterval:timeIntervalInSecs target:objectImplementingFunction selector:@selector(nameOfYourFunction:) userInfo:argToYourFunction repeats:YES];
导致计时器被放置在当前的runloop上。只要计时器触发,它就会调用你的功能。
如果您以后想要取消定时器调用
[repeatingTimer invalidate];
将其从runloop中删除。
答案 1 :(得分:2)
查看NSTimer课程。
答案 2 :(得分:1)
如果您想要简单,那么您只需使用alarm()
?
为SIGALRM
设置信号处理程序,然后调用alarm()
以要求操作系统在延迟后生成信号。有一个例子here。
答案 3 :(得分:1)
考虑使用Boost Asio library。班级deadline_timer适用于所有平台。只需使用bind将功能附加到async_wait并致电expires_from_now。
io_service io;
deadline_timer timer(io);
void handler()
{
static int second_counter = 0;
cout << second_counter++ << endl;
timer.expires_from_now(posix_time::seconds(1));
timer.async_wait(bind(&handler));
}
int main(int argc, char* argv[])
{
handler();
io.run();
}
要花一点时间来了解Asio(尤其是因为文档是......不完整的)但是非常值得学习。
答案 4 :(得分:0)
答案 5 :(得分:0)
Poco C++ library提供了跨平台Timer class。