2011-03-31 102 views
0

我正在用C++编写程序,我希望在程序执行的开始和结束时打印出时间。我在main()中使用了以下代码在开始时输出时间戳,但在程序结束时值不会更新。C++时间戳。更新输出

我目前只是在程序上工作,但我想也许一个函数会在这里受益。

int main(int argc, char **argv) { 
    time_t now; 
    struct tm *current; 
    now = time(0); 
    current = localtime(&now); 
    cout <<"Examination began at: " << current->tm_hour <<":" << current->tm_min <<":" << current->tm_sec << endl; 

    //program execution.... 

    cout <<"Examination ended at: " << current->tm_hour <<":" << current->tm_min <<":" << current->tm_sec << endl; 

    cout << "PROGRAM END++++++++++++++++++++++++++++++++++" << endl; 

    return 0; 
} 

我明白从运行该程序,它只是在第二次使用相同的值,我将如何去做这个功能?

回答

1

“当前”时间函数的值只能通过调用localtime()来设置。你在程序开始和结束时看到相同的值的原因是因为你只调用了一次该函数。在程序执行后,将'now'的值重置为时间(0)和 'current'为localtime的值(现在为&),您将看到所需的更新。

-1

使用clock,getrusagetimes等功能,可以获得更好的效果。阅读关于这些功能here

0

要退出时,您只需重复拨打电话timelocaltime即可。

int main(int argc, char **argv) { 
    time_t now; 
    struct tm *current; 
    now = time(0); 
    current = localtime(&now); 
    cout <<"Examination began at: " << current->tm_hour <<":" << current->tm_min <<":" << current->tm_sec << endl; 

    //program execution.... 

    now = time(0); 
    current = localtime(&now); 
    cout <<"Examination ended at: " << current->tm_hour <<":" << current->tm_min <<":" << current->tm_sec << endl; 
    cout << "PROGRAM END++++++++++++++++++++++++++++++++++" << endl; 

    return 0; 
} 

您问到了使这个功能。我不知道你需要的,但如果你想,它可能是这样的:

void write_timestamp(std::ostream& o, const char *when) { 
    time_t now; 
    struct tm *current; 
    now = time(0); 
    current = localtime(&now); 
    o << when << ": " << current->tm_hour <<":" << current->tm_min <<":" << current->tm_sec << endl; 
} 

int main(int argc, char **argv) { 
    write_timestamp(cout, "Examination began at"); 

    //program execution.... 

    write_timestamp(cout, "Examination ended at"); 
    cout << "PROGRAM END++++++++++++++++++++++++++++++++++" << endl; 
    return 0; 
} 

localtime只有一秒钟的分辨率,从而@littleadv points out,你会使用clock得到更准确的结果,getrusagetimes。或者,由于您使用的是C++,因此您可能会发现Boost.Timer有用。

+0

谢谢,我期待着。我很惊讶,我发现它很难找到关于日期/时间的C++信息(即时通过Java移动),它似乎是简单函数的复杂性的分配,而我读的许多东西似乎没有提供任何答案。如果时间允许,我会查看时钟和时间以提高分辨率。 – Chriss 2011-03-31 01:39:52