| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1138 人关注过本帖
标题:哥哥们 cpu可能是-1%么?
只看楼主 加入收藏
C蝌蚪
Rank: 2
来 自:安徽阜阳
等 级:论坛游民
威 望:1
帖 子:26
专家分:37
注 册:2016-4-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
哥哥们 cpu可能是-1%么?
#include <stdio.h>  
#include <Windows.h>
#include <iostream>

using namespace std;

typedef long long           int64_t;
typedef unsigned long long  uint64_t;

/// 时间转换
static uint64_t file_time_2_utc(const FILETIME* ftime)
{
    LARGE_INTEGER li;

    li.LowPart = ftime->dwLowDateTime;
    li.HighPart = ftime->dwHighDateTime;
    return li.QuadPart;
}

/// 获得CPU的核数
static int get_processor_number()
{
    SYSTEM_INFO info;
    GetSystemInfo(&info);
    return (int)info.dwNumberOfProcessors;
}

int get_cpu_usage(int pid)
{  
    //cpu数量
    static int processor_count_ = -1;
    //上一次的时间
    static int64_t last_time_ = 0;
    static int64_t last_system_time_ = 0;

    FILETIME now;
    FILETIME creation_time;
    FILETIME exit_time;
    FILETIME kernel_time;
    FILETIME user_time;
    int64_t system_time;
    int64_t time;
    int64_t system_time_delta;
    int64_t time_delta;

    int cpu = -1;

    if(processor_count_ == -1)
    {
        processor_count_ = get_processor_number();
    }

    GetSystemTimeAsFileTime(&now);

    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
    if (!GetProcessTimes(hProcess, &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))
    {
        last_system_time_ = system_time;
        last_time_ = time;
        return get_cpu_usage(pid);
    }

    system_time_delta = system_time - last_system_time_;
    time_delta = time - last_time_;

    if (time_delta == 0)
        return get_cpu_usage(pid);

    cpu = (int)((system_time_delta * 100 + time_delta / 2) / time_delta);
    last_system_time_ = system_time;
    last_time_ = time;
    return cpu;
}

int main()   
{  
    int cpu;
    int process_id;
    // 参数为进程id
    cin>>process_id;

    while(1)   
    {  
        cpu = get_cpu_usage(process_id);
        printf("CPU使用率: %d%%\n",cpu);

        Sleep(1000);
    }   
    return 0;
}



[此贴子已经被作者于2016-12-6 16:01编辑过]

2016-12-06 15:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:0 
不要那么自信
可能是因为 int get_cpu_usage(int pid) 函数中的那句 return -1;
2016-12-06 16:32
C蝌蚪
Rank: 2
来 自:安徽阜阳
等 级:论坛游民
威 望:1
帖 子:26
专家分:37
注 册:2016-4-3
收藏
得分:0 
回复 2楼 rjsp
是的  有办法修改么??
怎修改成一个正常的文件??   谢谢了
2016-12-06 18:34
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:20 
以下是引用C蝌蚪在2016-12-6 18:34:33的发言:

是的  有办法修改么??
怎修改成一个正常的文件??   谢谢了
文件?听不懂。

你的代码存在的问题就是
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
执行失败,返回了NULL
你得让它执行成功,比如
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, false, pid);
2016-12-07 08:22
C蝌蚪
Rank: 2
来 自:安徽阜阳
等 级:论坛游民
威 望:1
帖 子:26
专家分:37
注 册:2016-4-3
收藏
得分:0 
回复 4楼 rjsp
我不懂C++ 这个只是帮助朋友在这解决问题 !! 但是这个改了之后运行的结果还是-1  !这个是一个公司里面检测cpu的代码
2016-12-07 10:27
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 5楼 C蝌蚪
帮不了你,只有神仙能猜出具体的原因
你应该让他自己debug,看看哪一步出错了
2016-12-07 12:19
C蝌蚪
Rank: 2
来 自:安徽阜阳
等 级:论坛游民
威 望:1
帖 子:26
专家分:37
注 册:2016-4-3
收藏
得分:0 
回复 6楼 rjsp
嗯嗯  好的   谢谢你了
2016-12-07 12:58
快速回复:哥哥们 cpu可能是-1%么?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027205 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved