Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c+;中的特定时间每天调用一次函数+;?_C++_Timer - Fatal编程技术网

C++ 如何在c+;中的特定时间每天调用一次函数+;?

C++ 如何在c+;中的特定时间每天调用一次函数+;?,c++,timer,C++,Timer,如果我的应用程序正在运行,我需要弄清楚如何在特定时间调用函数 它可能会在一段时间内循环并检查时间,但我不希望它每分钟都检查时间,但我不希望它错过准确的时间,比如18:00 有什么方法可以做到这一点吗?最好的方法是使用提供这一点的操作系统工具,您只需担心编写函数。但是如果不是这样的话,你只需要像你说的那样定期检查时钟。编辑:我不知道为什么我认为这是Windows。我看不到任何地方有这样的说法。下面的API信息仅适用于Windows,但原理相同。Asio有可移植的异步定时器,如果不是Windows的

如果我的应用程序正在运行,我需要弄清楚如何在特定时间调用函数

它可能会在一段时间内循环并检查时间,但我不希望它每分钟都检查时间,但我不希望它错过准确的时间,比如18:00


有什么方法可以做到这一点吗?

最好的方法是使用提供这一点的操作系统工具,您只需担心编写函数。但是如果不是这样的话,你只需要像你说的那样定期检查时钟。

编辑:我不知道为什么我认为这是Windows。我看不到任何地方有这样的说法。下面的API信息仅适用于Windows,但原理相同。Asio有可移植的异步定时器,如果不是Windows的话

Windows信息:当应用程序启动时,检查所需事件的剩余时间间隔,并在适当的时间启动弹出窗口。计时器将在初始间隔后弹出,然后在周期间隔后重复弹出

CreateTimerQueueTimer函数

创建计时器队列计时器。这 计时器在指定的到期日过期 时间,然后在每个指定的 时期当计时器过期时,将显示 调用回调函数


使此事件驱动比定期检查时钟效率更高。

您可以在系统中安装计划任务,通知应用程序。
例如,如果您的系统是Linux,您可以使用cron。

如果您想从已经运行的程序中调用特定函数,请使用Boost的库和

现在将计时器设置为调用
foo()

通过使用上述两个代码段,可以添加任意数量的计时器。当一切准备就绪时:

io_service_.run ();

请注意,这将接管当前线程。因此,如果希望程序的其余部分继续运行,则必须从其他线程调用
run()
。(显然,使用Boost的库来实现这一点。)

取决于平台。您真的需要在代码中实现这一点,还是像Windows的调度任务或Unix中的Cron这样的调度程序同样可以实现您的目的?如果你确实需要它的代码,你在使用什么平台?是的,我确实需要它的代码。平台将是win nt和更高版本的Hey Steve,因此这实际上将在不使用boost的情况下生成线程?如果您在Windows上使用此工具,所需的线程将在后台处理-简言之,是的。如果您想要更便携的方式,Qt库有QTimer。但是,仅仅为了这个目的而使用这么大的图书馆可能有点过头了。嘿,克里斯,谢谢你发布这篇文章。如果使用boost,这非常有用。我需要一种不使用boost的方法,因为我需要我的应用程序只有一个exe,我不想静态链接boost。我应该在我的第一个问题中说明这一点,真的很抱歉误导了你。我希望有人看到你的答案并使用它。
gregorian::date today = gregorian::day_clock::local_day();
posix_time::time_duration usertime = posix_time::duration_from_string(time)
posix_time::ptime expirationtime (today, usertime);
timer_.expires_at (expirationtime);
timer_.async_wait (foo);    // use Boost::bind() if you want a member function
io_service_.run ();