UInt32 HawkProfiler::GetProcessorNumber() { if (!m_iCpuCount) m_iCpuCount = get_processor_number(); return m_iCpuCount; }
float get_cpu_usage() { //cpu数量 static int processor_count_ = get_processor_number(); //上一次的时间 static __int64 last_time_ = 0; static __int64 last_system_time_ = 0; FILETIME now; FILETIME creation_time; FILETIME exit_time; FILETIME kernel_time; FILETIME user_time; __int64 system_time; __int64 time; __int64 system_time_delta; __int64 time_delta; float cpu = -1; GetSystemTimeAsFileTime(&now); if (!GetProcessTimes(GetCurrentProcess(), &creation_time, &exit_time, &kernel_time, &user_time)) { return -1; } system_time = (file_time_2_utc(&kernel_time) + file_time_2_utc(&user_time)) / processor_count_; time = file_time_2_utc(&now); if ((last_system_time_ == 0) || (last_time_ == 0)) { // First call, just set the last values. last_system_time_ = system_time; last_time_ = time; return -1; } system_time_delta = system_time - last_system_time_; time_delta = time - last_time_; assert(time_delta != 0); if (time_delta == 0) return -1; // We add time_delta / 2 so the result is rounded. cpu = (((float)system_time_delta * 100 + (float)time_delta / 2) / time_delta); last_system_time_ = system_time; last_time_ = time; return cpu; }