我有一段时间后停止执行程序。
#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,以上程序是否会有效?
还有其他更好的方式吗?
答案 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;