2013-08-07 35 views
2

我打電話GetProcessTimes()週期性地在每次迭代做同樣的事情,但它似乎每次都會產生相同的結果,並且只是隨時間變化。這是一種正常的行爲嗎?不應該隨着時間的推移而改變結果嗎?GetProcessTimes調用週期性地返回相同的結果

void ImCalledPeriodically() { 

    static const DWORD dwPid = ::GetCurrentProcessId(); 
    static const HANDLE hProc = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwPid); 

    static FILETIME ftUnused1, ftUnused2; // Unused, mandatory parameters. 
    ULARGE_INTEGER uliUsr, uliKrn; 

    ::GetProcessTimes(hProc, & ftUnused1, & ftUnused2, (_FILETIME *)& uliKrn, (_FILETIME *)& uliUsr); 

    printf("usr=%I64d krn=%I64d", uliUsr.QuadPart, uliKrn.QuadPart); 

    // etc... 
} 

輸出值只改變時間倍,例如:

641002, 641002, 641002,然後 1092007, 1092007, 1092007,等。 。

它不應該每次都改變一些嗎?函數內部是否有某種刷新率?

感謝您的幫助。

+2

呃,你爲什麼要傳遞一個指向'ULARGE_INTEGER'的指針給一個需要指向FILETIME結構的函數呢? –

+0

這是一個很好的問題。這不是我自己的代碼,它操縱我nevet已經接近x的東西) – Virus721

+0

@CodyGray:這是因爲他想使用缺少'FILETIME'的'QuadPart'成員。 – Gabe

回答

3

您可能注意到,值只是每16毫秒發生一次更改,這是Windows對其定時器和線程時間段使用的默認時間間隔。因此,如果您在相對緊密的循環中進行呼叫,您將獲得重複的值。

最重要的是,時間顯示實際的CPU消耗量。如果你的程序在通話之間做的很少或沒有任何工作,時間不會增加。

+0

謝謝,但實際上每個電話之間有超過一秒鐘,所以我想這不是什麼導致問題。即使這個過程並不多,時間也不應該增加一點點嗎? – Virus721

+0

具體而言,值僅在線程的時間片結束時纔會更改。 –

+0

這意味着我的線程在一秒鐘內不間斷運行? – Virus721

相關問題