C ++后台计时器

时间:2012-03-19 20:43:13

标签: c++ timer background

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <time.h>

using namespace std;
using namespace System;

void wait ( int seconds )
{
  clock_t endwait;
  endwait = clock() + seconds * CLOCKS_PER_SEC ;
  while (clock() < endwait) {}
}
void timer()
{
    int n;
    printf ("Start\n");
    for (n=10; n>0; n--) // n = time
    {
        cout << n << endl;
        wait (1); // interval (in seconds).
    }
    printf ("DONE.\n");
    system("PAUSE");
}
int main ()
{
    timer();
    cout << "test" << endl; // run rest of code here.}

  return 0;
}

我正在尝试用C ++创建一个在后台运行的计时器。所以基本上如果你看一下'主要块'我想运行定时器(它将倒数到0)并同时运行下一个代码,在这种情况下是'test'。

现在,在计时器完成之前,下一行代码将不会运行。如何让计时器在后台运行?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

C ++ 11。应该与VS11 beta一起使用。

#include <chrono>
#include <iostream>
#include <future>

void timer() {
    std::cout << "Start\n";
    for(int i=0;i<10;++i)
    {
        std::cout << (10-i) << '\n';
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
    std::cout << "DONE\n";
}
int main ()
{
    auto future = std::async(timer);
    std::cout << "test\n";
}

如果在timer()中执行的操作需要很长时间,那么您可以获得更好的准确度:

void timer() {
    std::cout << "Start\n";
    auto start = std::chrono::high_resolution_clock::now();
    for(int i=0;i<10;++i)
    {
        std::cout << (10-i) << '\n';
        std::this_thread::sleep_until(start + (i+1)*std::chrono::seconds(1));
    }
    std::cout << "DONE\n";
}