每1分钟后如何在c ++中执行特定代码
Posted
技术标签:
【中文标题】每1分钟后如何在c ++中执行特定代码【英文标题】:how to execute a particular code in c++ after every 1 minute 【发布时间】:2012-04-21 19:43:21 【问题描述】:我需要做一些事情(我称之为调度程序)每分钟检查一次系统的时间,如果时间发生变化,假设它是 17:52,下一刻是 17:53,所以在 17:53调用函数 logupdated
我如何做到这一点,我不知道互斥锁和所有人。
谢谢
【问题讨论】:
首先,决定:你是想每 1 分钟调用一次函数,还是在系统时间的每分钟时钟滴答时调用一次函数?这些是不同的功能。 什么平台?在 Unix 上使用cron
.
你希望这个程序一直在你的系统后台运行吗?如果你这样做了,你可能想看看 unix 上的 cron-jobs,或者在 windows 上用 .net 框架编写一个 windows 服务。应用程序在调用记录器之间做任何工作吗?你在写多线程进程吗?
@KillianDS:考虑到它永远运行,我会说每个时钟滴答声我也有一些用于滚动日志的功能
@David-SkyMesh:在 windows 7 家庭高级版 64 位上
【参考方案1】:
我不确定我是否理解要求,但您的问题是“如何在每 1 分钟后在 c++ 中执行特定代码”,因此,在 c++11 中您可以这样做:
#include <thread>
#include <chrono>
int main()
while (true)
std::this_thread::sleep_for(std::chrono::seconds(60));
// call your c++ code
【讨论】:
@KillianDS 好点。我没有考虑任务本身的持续时间。我想如果有任何重叠的可能性,它也应该在单独的线程或进程中运行。 :不知道什么是 c++ 11 可能是升级版,但是我这里只有 ansic++,我不确定 netbeans ide 7.1.1 是否支持它 @gandhigcpp c++11 是新标准,所以它是 c++。但是,目前几乎没有编译器支持。 GCC 涵盖了我包含的代码 sn-p,但请查看 @KillianDS 对boost
替代方案的回答。
:std::this_thread语句有错误
:我需要在某个地方声明“this_thread”吗?它在测试时给我一个错误【参考方案2】:
如果您希望任务的执行独立于主程序流程,请考虑多线程。
这个例子在 C 中,应该也适用于 C++ 请注意,有些人认为我过度使用指针,我同意,特别是多线程,它会导致不安全的线程,从而导致数据损坏,甚至更糟糕的是,分段错误。 然而,据我所知,这是将参数传递给线程的唯一方法。
#include <pthread.h>
int main(int argc, char *argv[])
pthread_t thread1;
int variables=10;
pthread_create( &thread1, NULL, scheduler, (void*)&variables);
while(1)
.... do stuff as main program.
return 0;
void *scheduler (void* variables)
int vars;
int* p_vars = (int*) variables;
vars = *p_vars;
while (1)
.. do scheduler stuff
sleep (vars);
【讨论】:
以上是关于每1分钟后如何在c ++中执行特定代码的主要内容,如果未能解决你的问题,请参考以下文章