我有兩個系統調用GetSystemTime()和GetThreadTimes(),我需要通過給定的Win32線程來計算CPU利用率。爲了準確起見,我需要確保GetSystemTime()和GetThreadTimes()都是以原子方式執行的;即在GetSystemTime()的調用之間不應該有上下文切換()& GetThreadTimes()。Win32:代碼塊的原子執行
原因是偶爾我最終的比例超過了100%(約500分之一)。
如何確保2個函數調用的原子執行?
感謝, 薩欽
我有兩個系統調用GetSystemTime()和GetThreadTimes(),我需要通過給定的Win32線程來計算CPU利用率。爲了準確起見,我需要確保GetSystemTime()和GetThreadTimes()都是以原子方式執行的;即在GetSystemTime()的調用之間不應該有上下文切換()& GetThreadTimes()。Win32:代碼塊的原子執行
原因是偶爾我最終的比例超過了100%(約500分之一)。
如何確保2個函數調用的原子執行?
感謝, 薩欽
我不敢相信你能應付。除非你知道每個函數中的底層操作是什麼,並且因爲它們碰巧是Windows API調用......祝你好運。
難道只能調整百分比超過100嗎?
perc = (perc > 100.0f) ? 100.0f : perc;
可悲的是沒有辦法。在Win32中的兩次系統調用之間,無法阻止進程/線程被上下文切換。否則,對於某個人來說,實施一個通過拒絕每一次切換而鎖定系統的進程都是微不足道的。
以相反的順序調用函數有幫助嗎? (99%優於101%...)
此外,如果您在執行此操作之前強制切換上下文(例如調用Sleep()),您可能會減少切換的機會。我不知道這樣做會有多好。
有沒有辦法直接查詢Windows線程的CPU利用率? – rmeador 2008-11-13 22:04:45