C ++定时器功能,每1秒刷新一次

时间:2013-12-12 19:31:25

标签: c++ timer

我正在尝试为特殊事件每1秒刷新一次计时器功能。 问题是如果我使用while + Sleep(1000)for循环+ Sleep(1000),它不会加载其下的其他函数,所以我正在寻找解决方案。

我尝试了以下内容:

void Timer(){
  while(true){
    // events
    if(Get_Current_Minute == Event_Minute)
      // do event
      Sleep(1000);
  }
}

int Main(){

  std::cout << " Hello " << std::endl; // loaded
  Function() // loaded;

  Timer(); // the timer function

  std::cout << " Other functions " << std::endl; // not loaded
  Function_2() // not loaded
}

那么解决方案是什么?我想在我的应用程序中加载所有内容+每1秒钟有一次计时器刷新事件。

1 个答案:

答案 0 :(得分:1)

执行函数Timer()

  • 这是无限循环
  • 所以它永远不会继续你的Function_2();

如果你想实现它,那么Timer();应该是

  • 单独的帖子
  • 或实际OS定时器事件(无睡眠或循环)

如果你不想/不想这样做

  • 然后你必须将Function_2()和Timer()合并在一起。
  • 在这种情况下,请勿使用睡眠
  • 但是测量实时,如果它比计划的事件时间更大
  • 执行它并计划下一个活动时间

线程示例:

//---------------------------------------------------------------------------
volatile int  threads_run=0;
volatile bool threads_stop=false;
unsigned long __stdcall thread_timer(LPVOID p)
    {
    threads_run++;
    for (;threads_stop;)
        {
        //Do your event stuff
        Sleep(1000);
        }
    threads_run--;
    return 0;
    }
void main()
    {
    HANDLE hnd;
    std::cout << " Hello " << std::endl;
    Function();

    // start Timer thread
    hnd=CreateThread(0,0,thread_timer,NULL,0,0);

    std::cout << " Other functions " << std::endl;
    Function_2();

    // stop and wait for all threads
    threads_stop=true;
    for (;threads_run;) Sleep(10);
    }
//---------------------------------------------------------------------------