我正在编写一个将在Solaris机器上使用的程序。我需要一种方法来跟踪自程序启动以来经过的秒数。我在这里说的很简单。例如,我将有一个int秒= 0;但是如何在每秒通过时更新秒变量?
似乎我看过的各种时间函数只能在Windows机器上运行,所以我只是不确定。
任何建议都将不胜感激。
感谢您的时间。
答案 0 :(得分:23)
一种非常简单的方法:
#include <time.h>
time_t start = time(0);
double seconds_since_start = difftime( time(0), start);
这样做的主要缺点是您必须轮询更新。您需要平台支持或其他一些lib /框架才能在事件基础上执行此操作。
答案 1 :(得分:11)
使用std::chrono。
#include <chrono>
#include <iostream>
int main(int argc, char *argv[])
{
auto start_time = std::chrono::high_resolution_clock::now();
auto current_time = std::chrono::high_resolution_clock::now();
std::cout << "Program has been running for " << std::chrono::duration_cast<std::chrono::seconds>(current_time - start_time).count() << " seconds" << std::endl;
return 0;
}
如果你只需要秒的分辨率,那么std::steady_clock就足够了。
答案 2 :(得分:4)
你正在接近它。您不必担心每秒更新变量,只需在程序启动时使用当前时间初始化变量,然后每当您需要知道已经过了多少秒时,就从该初始时间中减去当前时间。这种方式的开销要少得多,并且不需要为一些与时序相关的变量更新。
答案 3 :(得分:1)
#include <stdio.h>
#include <time.h>
#include <windows.h>
using namespace std;
void wait ( int seconds );
int main ()
{
time_t start, end;
double diff;
time (&start); //useful call
for (int i=0;i<10;i++) //this loop is useless, just to pass some time.
{
printf ("%s\n", ctime(&start));
wait(1);
}
time (&end);//useful call
diff = difftime(end,start);//this will give you time spent between those two calls.
printf("difference in seconds=%f",diff); //convert secs as u like
system("pause");
return 0;
}
void wait ( int seconds )
{
clock_t endwait;
endwait = clock () + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait) {}
}
这也适用于solaris / unix,只需删除win refs
答案 4 :(得分:0)
您只需存储应用程序启动时的日期/时间。每当您需要显示程序运行的时间时,请获取当前日期/时间并减去应用程序启动时间。