每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 ++中执行特定代码的主要内容,如果未能解决你的问题,请参考以下文章

我如何在 jwt 令牌中设置过期 30 分钟

在目标c中使用完成块完成方法后如何执行另一种方法?

如何在linux中运行c程序

几分钟后如何执行 Java 代码?我想要一个非常简单的代码或函数[重复]

linux c ++如何在特定时间间隔后调用函数

如何在特定时间后更新firebase数据库中的值,比如10分钟后?