在 Linux 的 C/C++ 中是否可以在达到指定的日期/时间时收到通知

Is it possible in C/C++ in Linux to get informed when a specified date/time is reached?

本文关键字:日期 通知 时间 Linux C++ 是否      更新时间:2023-10-16
是否可以

在 Linux 中使用标准C++在系统时间到达指定日期/时间时获得通知(当然,假设我的进程已启动)?

我可以将计时器设置为我需要等待的时间,但是如果用户更改系统时间会发生什么?我是否可以从系统收到用户更改了系统时间以重置计时器的通知?

Linux 内核有这样的系统调用,尽管它们没有集成到 libc API 中。您可以创建一个计时器,从内核获取它的文件描述符,并对描述符执行选择或 epoll 调用,以便在计时器触发时收到通知。

它的手册页:http://www.kernel.org/doc/man-pages/online/pages/man2/timerfd_create.2.html

当然,只需编写代码即可执行所需的操作。例如:您可以保留所有此类计时器的列表,它们应该被触发的日期/时间,以及它们发生时应该执行的代码。然后,每隔一段时间,您就可以检查时间,看看它是否已经过了任何计时器应该触发的时间。如果是这样,请解雇他们,将其从列表中删除,然后继续您的业务。

请参阅"at"命令的文档(man at)

例如,at 可以在给定时间(如下午 2:35)向您发送电子邮件。

at 14:35
warning: commands will be executed using /bin/sh
at> mail -s "It is 2:35 PM" dbadmin < /dev/null
at><EOT> # After CTRL/D pressed.
job 9 at Tue May  8 14:35:00 2012

您可以计算从程序开始到事件的时间,然后调用

sleep (difftime-1); 

然后你可以控制时间是否被重置,但这样你只能将时间更正到未来 - 如果时间被设置回来,你会跳过这个事件。