2011-03-31 99 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