等一会儿

时间:2011-01-16 10:17:57

标签: c++ linux datetime sleep

我要求在特定时间启动我的申请。我不想被投入玉米工作。我的可执行文件是一个应用程序,喜欢从2011年1月20日开始 所以我必须把它作为 ./app-date 2011年1月20日

这里的问题是,我将如何计算命令行选项中提供的当前和日期的时差。

我不想写win功能。是否有任何构建功能可用于这种类型的时差。 (c和Linux)

2 个答案:

答案 0 :(得分:4)

我知道你期待C回答,但这可能让你感兴趣:

由于您使用的是Linux,系统已经提供了一种有效的方式来安排执行任务:at

在您的情况下,想要在20.01.2011上午8点运行任务的用户只需键入:

echo "./app" | at 08:00 20.01.2011

将使用用户的凭据运行任务。请注意,at也接受相对时间指令,例如at now +1 day。它是一个功能强大的工具,默认情况下随大多数Linux发行版一起提供。

可以使用预定作业列表:

atq

您甚至可以使用以下方式删除预定作业:

atrm

希望这有帮助。

答案 1 :(得分:1)

您可以计算开始时间与现在之间的差异(以毫秒为单位),然后将该数字作为超时参数传递给select()epoll(),等待那么多毫秒。

要计算差异,一种方法是首先使用struct tm将日期字符串转换为strptime(),然后将其传递给mktime(),这将为您提供一些秒数unix epoch 1970-01-01 00:00:00。然后使用gettimeofday()clock_gettime()获取当前时间,它们还会报告自unix时代以来的时间。将开始时间和当前时间转换为秒并减去值。