如何创建一个反复运行我的程序的计时器? C ++

时间:2011-07-12 19:33:27

标签: c++ timer

我想在我的程序中创建计时器,以便我可以让它每分钟重新运行,而且我不知道如何在C ++应用程序中执行它。在C#中我可以创建一个计时器,但我现在在这里挣扎......

睡眠();不是一个选项,因为据我所知,它使您的程序在X秒内处于非活动状态,我需要我的应用程序处于活动状态并正常工作,并且一直在计算。这是因为我的代码用于不断地将信息输入到MS Access表中。我能够创建我的代码的必要组件来连接和执行对表的插入/更新,但这只是我正在创建的代码的许多组件。请帮我解决这个小问题(或大问题),我是C ++和学习ATM的新手,但我正在开发一个快速的学习曲线。感谢

5 个答案:

答案 0 :(得分:1)

每个平台都提供api来创建一个计时器,通常在计时器到期后给你一个回调。您只需搜索平台上可用的API即可。

如果您使用的是Windows,请使用 setTimer 功能。

答案 1 :(得分:1)

我认为你在Windows上工作,因为你提到了C#。所以,请查看SetTimer,如果它是MFC应用,请查看CWnd::SetTimer

答案 2 :(得分:0)

如果您使用的是C ++ .NET,则可以使用与C#相同的Timer类,只需使用C ++语法(使用gcnew而不是new,使用^进行GC引用)。

否则你可能只有一个循环:

while (should_keep_looping) {
  // do what you need to do

  // if necessary:
  sleep(1);
}

答案 3 :(得分:0)

见这里:http://www.cplusplus.com/forum/beginner/317/

在C ++中有内置的“计时器”,你对sleep()的行为是正确的。上面的线程描述了一个自定义实现。

答案 4 :(得分:0)

  • 如果你有一个窗口,你可以使用它的消息队列,正如Als和Marius在他们的答案中所建议的那样
  • 您可以使用一些任务调度程序和一些计时器来注册回调,例如Boost.Asio及其deadline_timerexample
  • 提供的功能
  • 您可以按照BlackJack链接
  • 中的建议手动检查您的任务之间的计时器是否已过期
  • 或者您可以创建单独的线程,并在时间到来时调用您的回调。优点:你可以在那里使用sleep(),你的回调将与你的主线程并行调用。缺点:担心同步