2012-10-19 56 views
1

這將只顯示函數被調用時的靜態時間... 如何顯示運行時間?即:當從12:00到12:01的時間的變化,它會自動顯示在屏幕上 我基本上要輸出在我的命令屏幕的頂部運行的時鐘,並顯示其他選項等它的下面C++如何使運行時間顯示在cmd上?作爲系統變化所需的運行時鐘(「清除」)?

//http://stackoverflow.com/questions/997946/c-get-current-time-and-date 
// Get current date/time, format is YYYY-MM-DD.HH:mm:ss 
const string currentDateTime() { 
    time_t  now = time(0); 
    struct tm tstruct; 
    char  buf[80]; 
    tstruct = *localtime(&now); 
    // Visit http://www.cplusplus.com/reference/clibrary/ctime/strftime/ 
    // for more information about date/time format 
    strftime(buf, sizeof(buf), "%Y-%m-%d.%X", &tstruct); 

    return buf; 
} 

回答

0

深呼吸,因爲這不容易。

您必須從根本上設計您的應用以複用幾個不同的,同時發生的「事件」,例如鍵盤活動和計時器。

您還必須使用與從stdin讀取並寫入標準輸出不同的輸入/輸出方法。您將需要一個合適的終端或圖形界面。

現在,一旦你對這兩個想法有了頭腦,就需要設計你的應用程序。基本要素是事件循環。這是一個無限循環,每次至少有一個事件可用時基本上執行一次循環。根據事件,您可以採取措施:如果計時器觸發,請更新時間顯示。如果鍵盤觸發,則處理輸入。

無論您的程序執行什麼邏輯,都必須適合某處。例如,如果用戶輸入拼寫出一個您認出的命令,則可以開始一些響應操作。或者,您可能會在定時器的每1000次觸發中定期發生一些操作。一個函數的結果可能會觸發一個本身可能被事件循環捕獲的事件。只要你的程序邏輯執行得足夠快,以便及時處理定時器,這將是完全可以接受的。只有當你的程序有太多的工作時,你纔會開始考慮讓多個線程同時運行事件循環(但這很難)。

在Linux上,此設計的標準實現是epoll,用於多路複用和文件描述符,timerfds,eventfds和signalfds以及終端控件ncurses。其他平臺有相應的技術。