在一定时间后停止程序执行的更好方法

时间:2014-04-08 09:01:51

标签: c++ time

我有一段时间后停止执行程序。

#include <iostream> 
#include<ctime>
using namespace std; 

int main( )
{ 
    time_t timer1;
    time(&timer1);
    time_t  timer2;
    double second;
    while(1)
    {
        time(&timer2);
        second = difftime(timer2,timer1);
        //check if timediff is cross 3 seconds
        if(second > 3)
        {
            return 0;
        }
    }
    return 0;
}

如果时间从23:59增加到00:01,以上程序是否会有效?

还有其他更好的方式吗?

3 个答案:

答案 0 :(得分:2)

如果你有C ++ 11,你可以查看this example:

#include <thread>
#include <chrono> 
int main() {
  std::this_thread::sleep_for (std::chrono::seconds(3));
  return 0;
}

或者,我会使用您选择的线程库并使用其线程休眠功能。在大多数情况下,最好将线程发送到休眠状态,而不是忙于等待。

答案 1 :(得分:1)

time()返回自大纪元(1970年1月1日00:00:00)以来的时间,以秒为单位。因此,一天中的时间并不重要。

答案 2 :(得分:1)

您可以在C ++ 11中使用std::chrono::steady_clock。请查看now static method中的示例以获取示例:

  using namespace std::chrono;

  steady_clock::time_point clock_begin = steady_clock::now();

  std::cout << "printing out 1000 stars...\n";
  for (int i=0; i<1000; ++i) std::cout << "*";
  std::cout << std::endl;

  steady_clock::time_point clock_end = steady_clock::now();

  steady_clock::duration time_span = clock_end - clock_begin;
  double nseconds = double(time_span.count()) * steady_clock::period::num / steady_clock::period::den;

  std::cout << "It took me " << nseconds << " seconds.";
  std::cout << std::endl;