掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CPU稼働率がうまく取れなくなってしまいました。 (ID:72378)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
winxp(x86)、vista(x64)、win7(x86) でも特に問題は無さげだった。 volatile static bool loop_; void __cdecl counterThread(void* param) { _TCHAR path[_MAX_PATH]; PDH_COUNTER_PATH_ELEMENTS cpe = { 0 }; cpe.szObjectName = _T("Processor"); cpe.szInstanceName = _T("_Total"); cpe.dwInstanceIndex = -1; cpe.szCounterName = _T("% Processor Time"); DWORD length = _MAX_PATH; ::PdhMakeCounterPath(&cpe, path, &length, 0); HQUERY query; ::PdhOpenQuery(NULL, 0, &query); HCOUNTER counter; ::PdhAddCounter(query, path, 0, &counter); ::PdhCollectQueryData(query); while (loop_) { ::Sleep(1000); ::PdhCollectQueryData(query); PDH_FMT_COUNTERVALUE value; ::PdhGetFormattedCounterValue(counter, PDH_FMT_DOUBLE,NULL, &value); _TCHAR t[32]; _stprintf(t, _T("\n%3.3f"), value.doubleValue); DWORD written; ::WriteConsole(::GetStdHandle(STD_OUTPUT_HANDLE), t, _tcslen(t), &written, NULL); } ::PdhRemoveCounter(counter); ::PdhCloseQuery(query); _endthread(); } void __cdecl stressThread(void* param) { while (loop_) { for (volatile DWORD dw=0; dw < DWORD(param); ++dw) ; ::Sleep(10); } _endthread(); } int _tmain() { _tsystem(_T("pause")); // start loop_ = true; _beginthread(&counterThread, 0, NULL); _beginthread(&stressThread, 0, (void*)5000000); // 5000000 は適当値 _tsystem(_T("pause")); // end loop_ = false; ::Sleep(1000); return 0; }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.