【问题标题】:Run a function every X seconds c++ [duplicate]每X秒运行一个函数c ++ [重复]
【发布时间】:2017-07-17 18:01:09
【问题描述】:

我在控制台应用程序中使用 VC++ 2008。我想每 x 秒调用一次函数。我有一段代码,但问题是 setTimer 后面的代码没有执行。我看起来像一个同步计时器或线程,但由于我的 c++ 版本很旧,我不能包含线程或计时。谁能帮我?提前致谢。

代码在这里:

void CALLBACK f(HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime){cout <<"Hello";}

int _tmain(){
MSG msg;
SetTimer(NULL, 0, 100*60,(TIMERPROC) &f);
while(GetMessage(&msg, NULL, 0, 0)) 
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
//more code to be execute, but it does not.
return 0;}

此问题已被标记为重复,但问题不在于未显示该消息,这是正确的。问题是创建一个计时器并同时运行程序。

【问题讨论】:

  • 是的,但我更喜欢使用控制台应用程序。我更习惯了。
  • 对不起。如果您想继续从事这项业务,就需要不时学习新知识。

标签: c++ multithreading


【解决方案1】:
#include <time.h>

float timeDelta = 0;
clock_t clk = clock(), temp;

while (timeDelta <= /*NumSecondsDesire*/)
{
    temp = clock() - clk;
    clk = clock();
    timeDelta += (float)((float)temp / CLOCKS_PER_SEC);
}

这应该为你做。 clock() 返回点击次数,然后将其除以处理器特定的 CLOCKS_PER_SEC 以获得秒数。您可能希望在 if 语句中使用这种情况,在这种情况下,在 timeDelta = NumSecondsDesired 的每次迭代中将 timeDelta 重置为 = 0。

【讨论】:

  • 忙碌等待轮询可能是一个让工作被笑死的好方法。
  • 谢谢扎克。使用此代码可以继续运行程序直到进入时钟?
  • @Andermutu 如果你的意思是,你能保持程序运行直到达到时间限制吗?好的。只需将 while 条件包含在您的主程序循环中,并将上面的代码按列出的顺序排列,否则实际花费的时间将与您的程序所说的内容有所偏差。
  • 再次感谢 Zach,但我收到此错误。 'Error 1 error C3861: 'clock': no se encontró el identificador c:\Users\P\Documents\Visual Studio 2008\Projects\Timer 3\Timer 3\Timer 3.cpp 9 Timer 3'
  • 也许我需要添加其他内容?
猜你喜欢
  • 2019-03-11
  • 2017-07-07
  • 1970-01-01
  • 2022-01-14
  • 2012-06-04
  • 2017-10-28
  • 1970-01-01
  • 2020-06-09
相关资源
最近更新 更多