求k线高手实战精要指点组六最新方案在实战中该怎么使用?

博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Access denied | www.supmen.com used Cloudflare to restrict access
Please enable cookies.
What happened?
The owner of this website (www.supmen.com) has banned your access based on your browser's signature (b1ebf-ua98).我是在租住的房间里连的房东的网线,估计是4M的,也有可能是2M的,有几个人用不知道,但应该是3-5台电脑使用,平时我喜欢玩玩天龙八部,挂下QQ!但发现游戏总是不停的断开连接,卫士测速有时候测不出来,有时候又能测出来!QQ也是时不时重新连接!我不知道是游戏的原因还是电脑本
我是在租住的房间里连的房东的网线,估计是4M的,也有可能是2M的,有几个人用不知道,但应该是3-5台电脑使用,平时我喜欢玩玩天龙八部,挂下QQ!但发现游戏总是不停的断开连接,卫士测速有时候测不出来,有时候又能测出来!QQ也是时不时重新连接!我不知道是游戏的原因还是电脑本身的原因还是房东故意改了些什么!,我对路由器一概不知!
我用的神州老牌子笔记本:
1、NVIDIA GeForce GT325M 512M 独显
2、2G DDR3内存/320GB硬盘/DVDRW光驱
3、14.0 LED液晶光屏
现求高手指点。。。高分献上!
比较可能的原因是网线接触不良,网线两端的水晶头质量可能不好,导致信号时断时续。更换网线或水晶头就行了。
另一个原因是有人用迅雷等下载大文件。这个要靠自觉。
其它原因及解决方案如下 :
你打听其它几个人网速如何,如果都这样,请房东解决,因为那基本上问题出在相关信息服务商的身上猫有问题,请房东联系相关人员维护。
或路由器有问题,如果使用了交换机,也许是它有问题,这个由房东处理。
如果有能正常上网的,建议把你的电脑用他的网线上网试试,如果能上,那就是你那根网线有问题,要求房东更换网线或者换一个插口(路由器的),如果不能上,你的电脑有问题,可能是软件设置原因或局域网设置原因,再一个可能是硬件坏了。请懂的人维修吧。
其它:安装一个ARP防火墙,这个对有问题的局域网还是非常重要的。
"金山ARP防火墙"是一款体积小巧且完全免费的专业防恶意ARP欺骗攻击软件,这款软件的最大特色之一就是可以双向拦截(即来自外部接受或是由本机发出的ARP攻击数据包)ARP欺骗攻击包并快速监测锁定攻击源,时刻保护局域网用户电脑的正常上网数据流向,是一款十分适合个人用户使用的反ARP欺骗保护工具。
一个小型局域...
比较可能的原因是网线接触不良,网线两端的水晶头质量可能不好,导致信号时断时续。更换网线或水晶头就行了。
另一个原因是有人用迅雷等下载大文件。这个要靠自觉。
其它原因及解决方案如下 :
你打听其它几个人网速如何,如果都这样,请房东解决,因为那基本上问题出在相关信息服务商的身上猫有问题,请房东联系相关人员维护。
或路由器有问题,如果使用了交换机,也许是它有问题,这个由房东处理。
如果有能正常上网的,建议把你的电脑用他的网线上网试试,如果能上,那就是你那根网线有问题,要求房东更换网线或者换一个插口(路由器的),如果不能上,你的电脑有问题,可能是软件设置原因或局域网设置原因,再一个可能是硬件坏了。请懂的人维修吧。
其它:安装一个ARP防火墙,这个对有问题的局域网还是非常重要的。
"金山ARP防火墙"是一款体积小巧且完全免费的专业防恶意ARP欺骗攻击软件,这款软件的最大特色之一就是可以双向拦截(即来自外部接受或是由本机发出的ARP攻击数据包)ARP欺骗攻击包并快速监测锁定攻击源,时刻保护局域网用户电脑的正常上网数据流向,是一款十分适合个人用户使用的反ARP欺骗保护工具。
一个小型局域网中,经常会出现由于恶意ARP欺骗攻击而导致用户上网中断的情况。事实上现在基于恶意ARP欺骗攻击的现象在许多局域网中是普遍存在的,一个小小的恶意ARP欺骗软件在局域网中的任何一台客户端电脑上运行都有可能让整个网络陷于瘫痪。
其他答案(共9个回答)
电脑没有什么问题
掉线的问题,都有可能,比如1)电脑的网口松动了,2)或者你在下载一些电影,3)或者你家的网络被盗用了,4)或者运营商的网络瞬断了,都有可能需要具体排查。一般作为运营商来讲,这种问题是比较低级的,这种问题不太会发生。建议采用如下的排除手段:
1. 首先用你的电脑和网线到其它地方上网,排除电脑本身的问题
2. 关闭网络下载工具,迅雷,优酷,等等
3. 设定网络访问密钥,防止邻居偷用网络
4. 最后,基本可以确定是运营商的问题了,换运营商把
你的电脑不老!还是相当的新,09年的高端货,10年初的主流机,现在卖的价格还是相当的不低。
很可惜,你的问题无人可以回答具体是为什么!
或者你的房东有搞鬼,或者没搞鬼,2-4m的网线要4-5台电脑来玩网络游戏,那么就是电脑不断断续续就奇怪了!当然也不见得就会断断续续,但肯定它才是主要原因!而至于你的房东的设备使用什么,看不到也不清楚,但估计如果不用交换机的话,有人一玩游戏,其他的人就很难过日子了!也是说你的电脑舒畅的时候,很可能别人正骂娘!----看不懂我的意思的话,我也没办法了。
路由器设置界面有个延时设置,设置为0.
另外网线,系统不稳定也会出现问题.仔细排除.好运
你说的情况应该不是病毒、木马
只要安装了网卡
并且连接了路由器
开机后网卡就会自己连接
因为现在的网卡都是智能的;
是否有病毒、木马
查查就知道了:
计算机安全...
那是主人以经在路由器设置了限速了,那是无办法能让你提速的啊,你能上网就是那样了,你还是死心好了,是没有人能帮到你的啊
我也遇到个过,后来重装系统就好了.
还有一次是用NOTRON杀没问题,用正版瑞星杀出了9个懦虫病毒.使用腾讯TT浏览器就好了
下个 驱动精灵 检测一下 网卡驱动
答: 卡盟刷钻平台哪个好
答: 它在电缆电视的基础上,将分配网络的主干部分改为光缆,在各个服务节点处完成光电转换,再由同轴电缆将传输信号送到用户家里,可有效地实现Internet访问、电视点播...
答: 这个问题我好象在
这个论坛上面
你自己找一找进入后有分类自己看
一定能找到你的答案的,如果解决了你的问题一定要给我加分哦!
大家还关注
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415求高手指点,C或C++获取系统和进程的磁盘读写速率,网络速率等信息。-CSDN论坛-真格学网-IT技术综合网站
求高手指点,C或C++获取系统和进程的磁盘读写速率,网络速率等信息。-CSDN论坛
来源:互联网 &责任编辑:小易 &时间: 17:11:41
本网有用户碰到这样的问题:求高手指点,C或C++获取系统和进程的磁盘读写速率,网络速率等信息。-CSDN论坛,具体问题如下:
本网根据需求用户需求,为用户寻得以下其他网友提供的解决方法,方法仅供参考,具体如下:解决方案1:
先自己顶起。坐等大神指点。
解决方案2:
我以前好像做过,看看代码能找打不
解决方案3:
这些够不?
&&&&&&&&&&&&&&&1.获取系统CPU使用率
2.获取系统总内存大小
3.获取系统可用内存大小
4.获取系统内存使用率
5.获取系统进程数
6.获取系统线程数
7.获取系统句柄数
1.获取某个进程CPU使用率
2.获取某个进程内存使用大小
3.获取某个进程内存使用在系统内存使用的百分比
4.获取某个进程的线程数
5.获取某个进程的句柄数
6.获取某个进程的内存使用峰值
7.获取某个进程的内存使用峰值
解决方案4:
引用&3&楼&xihu1364&的回复:这些够不?
&&&&&&&&&&&&&&&1.获取系统CPU使用率
2.获取系统总内存大小
3.获取系统可用内存大小
4.获取系统内存使用率
5.获取系统进程数
6.获取系统线程数
7.获取系统句柄数
1.获取某个进程CPU使用率
2.获取某个进程内存使用大小
3.获取某个进程内存使用在系统内存使用的百分比
4.获取某个进程的线程数
5.获取某个进程的句柄数
6.获取某个进程的内存使用峰值
7.获取某个进程的内存使用峰值
谢谢了,不过没有磁盘,我现在差这块。
解决方案5:
http://blog.csdn.net/glorywu/article/details/4552739
看看这个网站
解决方案6:
还有这个http://www.cnblogs.com/flying_bat/archive//153219.html
解决方案7:
在MSDN里面搜“PDH”
解决方案8:
开源windows任务管理器类项目多如牛毛!我猜。
解决方案9:
&&&&&&&&HQUERY&&hQ
HCOUNTER&hcRead,&hcW
PDH_FMT_COUNTERVALUE&
PDH_STATUS&lStatus&=&PdhOpenQuery(NULL,&NULL,&&hQuery);
if&(lStatus&!=&ERROR_SUCCESS)
PdhAddCounter(hQuery,&"\\PhysicalDisk(_Total)\\Avg.&Disk&Bytes/Read",&NULL,&&hcRead);
PdhAddCounter(hQuery,&"\\PhysicalDisk(_Total)\\Avg.&Disk&Bytes/Write",&NULL,&&hcWrite);
lStatus&=&PdhCollectQueryData(hQuery);
if&(lStatus&!=&ERROR_SUCCESS)
Sleep(100);
char&temp[128];
lStatus&=&PdhCollectQueryData(hQuery);
if&(lStatus&!=&ERROR_SUCCESS)
lStatus&=&PdhGetFormattedCounterValue(hcRead,&PDH_FMT_LONG,&NULL,&&cv);
if&(lStatus&==&ERROR_SUCCESS)
memset(temp,&0,&128);
sprintf_s(temp,&128,&"%u",&cv.longValue);
lStatus&=&PdhGetFormattedCounterValue(hcWrite,&PDH_FMT_LONG,&NULL,&&cv);
if&(lStatus&==&ERROR_SUCCESS)
memset(temp,&0,&128);
sprintf_s(temp,&128,&"%u",&cv.longValue);
PdhRemoveCounter(hcRead);
PdhRemoveCounter(hcWrite);
PdhCloseQuery(hQuery);
我试过这个了,基本都是0。找不到问题出在哪了,而且用这个方法获取cpu也和任务管理器差的非常大。
解决方案10:
你比较下看看,差别可能有,比较刷的时间可能不一样
但是我用的时候,数据是差不多的
void&CSRongSysInfo::UpDateData()
if&(!m_bIsProcessName)
//系统内存总数
MEMORYSTATUSEX&
statex.dwLength&=&sizeof(statex);
GlobalMemoryStatusEx(&statex);
m_lSysTotalMem&=&statex.ullTotalPhys&/&1024;
HQUERY&&hQ
HCOUNTER&hcSysAvailableMem,&hcSysC
HCOUNTER&hcSysHandleCount,&hcSysProcesses,&hcSysT
PDH_STATUS&lStatus&=&PdhOpenQuery(NULL,&NULL,&&hQuery);
if&(lStatus&!=&ERROR_SUCCESS)
PdhAddCounter(hQuery,&_T("\\Memory\\Available&Bytes"),&NULL,&&hcSysAvailableMem);//可用内存
PdhAddCounter(hQuery,&_T("\\Processor(_Total)\\%&Processor&Time"),&NULL,&&hcSysCpu);
PdhAddCounter(hQuery,&_T("\\Process(_Total)\\Handle&Count"),&NULL,&&hcSysHandleCount);
PdhAddCounter(hQuery,&_T("\\System\\Processes"),&NULL,&&hcSysProcesses);
PdhAddCounter(hQuery,&_T("\\System\\Threads"),&NULL,&&hcSysThreads);
HCOUNTER&hcCPU&=&NULL;
HCOUNTER&hcThreadCount&=&NULL;
HCOUNTER&hcHandleCount&=&NULL;
HCOUNTER&hcWorkingSet&=&NULL;
HCOUNTER&hcWorkingSetPeak&=&NULL;
PDH_COUNTER_PATH_ELEMENTS&
char&szBuf[1024]&=&"";
DWORD&dwBufSize&=&0;
elements.szMachineName&=&NULL;
elements.szObjectName&=&"Process";
elements.szInstanceName&=&m_szProcessN
elements.szParentInstance&=&NULL;
elements.dwInstanceIndex&=&-1;
elements.szCounterName&=&const_cast&char&*&("%&Processor&Time");
dwBufSize&=&sizeof(szBuf);
PdhMakeCounterPath(&elements,&szBuf,&&dwBufSize,&0);
lStatus&=&PdhAddCounter(hQuery,&szBuf,&NULL,&&hcCPU);
if&(lStatus&!=&ERROR_SUCCESS)
elements.szCounterName&=&const_cast&char&*&("Thread&Count");
dwBufSize&=&sizeof(szBuf);
PdhMakeCounterPath(&elements,&szBuf,&&dwBufSize,&0);
lStatus&=&PdhAddCounter(hQuery,&szBuf,&NULL,&&hcThreadCount);
if&(lStatus&!=&ERROR_SUCCESS)
elements.szCounterName&=&const_cast&char&*&("Handle&Count");
dwBufSize&=&sizeof(szBuf);
PdhMakeCounterPath(&elements,&szBuf,&&dwBufSize,&0);
lStatus&=&PdhAddCounter(hQuery,&szBuf,&NULL,&&hcHandleCount);
if&(lStatus&!=&ERROR_SUCCESS)
elements.szCounterName&=&const_cast&char&*&("Working&set");
dwBufSize&=&sizeof(szBuf);
PdhMakeCounterPath(&elements,&szBuf,&&dwBufSize,&0);
lStatus&=&PdhAddCounter(hQuery,&szBuf,&NULL,&&hcWorkingSet);
if&(lStatus&!=&ERROR_SUCCESS)
elements.szCounterName&=&const_cast&char&*&("Working&set&Peak");
dwBufSize&=&sizeof(szBuf);
PdhMakeCounterPath(&elements,&szBuf,&&dwBufSize,&0);
lStatus&=&PdhAddCounter(hQuery,&szBuf,&NULL,&&hcWorkingSetPeak);
if&(lStatus&!=&ERROR_SUCCESS)
PDH_FMT_COUNTERVALUE&
memset(&cv,0,sizeof(PDH_FMT_COUNTERVALUE));
lStatus&=&PdhCollectQueryData(hQuery);
if&(lStatus&!=&ERROR_SUCCESS)
//&CPU时间,必须等待一下
Sleep(100);
lStatus&=&PdhCollectQueryData(hQuery);
if&(lStatus&!=&ERROR_SUCCESS)
//&句柄总数
lStatus&=&PdhGetFormattedCounterValue(hcSysHandleCount,&PDH_FMT_LONG,&NULL,&&cv);
if&(lStatus&==&ERROR_SUCCESS)
m_nSysHandleCount&=&cv.largeV
//&线程总数
lStatus&=&PdhGetFormattedCounterValue(hcSysThreads,&PDH_FMT_LONG,&NULL,&&cv);
if&(lStatus&==&ERROR_SUCCESS)
m_nSysThreadCount&=&cv.largeV
//&进程总数
lStatus&=&PdhGetFormattedCounterValue(hcSysProcesses,&PDH_FMT_LONG,&NULL,&&cv);
if&(lStatus&==&ERROR_SUCCESS)
m_nSysProcessCount&=&cv.longV
lStatus&=&PdhGetFormattedCounterValue(hcSysCpu,&PDH_FMT_LARGE,&NULL,&&cv);
if&(lStatus&==&ERROR_SUCCESS)
m_nSysCpu&=&cv.largeV
lStatus&=&PdhGetFormattedCounterValue(hcSysAvailableMem,&PDH_FMT_LARGE,&NULL,&&cv);
if&(lStatus&==&ERROR_SUCCESS)
m_lSysAvailableMem&=&cv.largeValue&/&1024;
lStatus&=&PdhGetFormattedCounterValue(hcCPU,&PDH_FMT_DOUBLE&|&PDH_FMT_NOCAP100,&NULL,&&cv);
if&(lStatus&==&ERROR_SUCCESS)
m_nProcessCpu&=&cv.doubleValue&/&2;
lStatus&=&PdhGetFormattedCounterValue(hcThreadCount,&PDH_FMT_LONG,&NULL,&&cv);
if&(lStatus&==&ERROR_SUCCESS)
m_nProcessThreadCount&=&cv.longV
lStatus&=&PdhGetFormattedCounterValue(hcHandleCount,&PDH_FMT_LONG,&NULL,&&cv);
if&(lStatus&==&ERROR_SUCCESS)
m_nProcessHandleCount&=&cv.longV
//&内存使用
lStatus&=&PdhGetFormattedCounterValue(hcWorkingSet,&PDH_FMT_LARGE,&NULL,&&cv);
if&(lStatus&==&ERROR_SUCCESS)
m_lProcessMem&=&cv.largeValue&/&1024;
//&高峰内存使用
lStatus&=&PdhGetFormattedCounterValue(hcWorkingSetPeak,&PDH_FMT_LARGE,&NULL,&&cv);
if&(lStatus&==&ERROR_SUCCESS)
m_lProcessMemMax&=&cv.largeValue&/&1024;
PdhRemoveCounter(hcSysAvailableMem);
PdhRemoveCounter(hcSysCpu);
PdhRemoveCounter(hcSysHandleCount);
PdhRemoveCounter(hcSysProcesses);
PdhRemoveCounter(hcSysThreads);
PdhRemoveCounter(hcCPU);
PdhRemoveCounter(hcThreadCount);
PdhRemoveCounter(hcHandleCount);
PdhRemoveCounter(hcWorkingSet);
PdhRemoveCounter(hcWorkingSetPeak);
PdhCloseQuery(hQuery);
解决方案11:
仅供参考:#pragma comment(lib,"pdh")
#include&&stdio.h&
#include&&stdlib.h&
#include&&malloc.h&
#include&&locale.h&
#include&&pdh.h&
#include&&pdhmsg.h&
#include&&tchar.h&
#include&&windows.h&
//一.性能计数器简介:
//系统性能计数器?也许好多朋友没有用过吧!(献丑了)此物可谓功能强大,顾名思义就是可以统计&Windows&系统各项性能指标的东西。在&Windows&2000&及以上系统中,如果是默认安装就会自带性能计数器程序,大家可以在&“控制面板&-〉管理&-〉性能”中看到该程序。
//Windows&系统性能计数器可以实时跟踪上百项系统性能指标,在该系统程序的绘图界面上鼠标右击,选择“添加计数器”就有可能看到所有可统计的项目。常常在论坛里看到一些新朋友问如何自己实现任务管理器,及如何实时获得每个进程的CPU使用率,内存使用...等等,那么我想使用系统性能计数器应该是最佳选择。言归正传,实现方法,请看下文。
//二.具体实现:
//相关API简介及事例代码:
bool&pdhdump()&{
//1.PdhOpenQuery:打开计数器
PDH_STATUS&pdhS
// HQUERY&hQuery&= NULL;
// HCOUNTER&pCounterHandle =&NULL;
// pdhStatus&= PdhOpenQuery(0, 0,&&hQuery);
// if&(pdhStatus&!=&ERROR_SUCCESS) return&
// //分配计数器句柄空间
// pCounterHandle&=&(HCOUNTER&*)GlobalAlloc(GPTR,&sizeof(HCOUNTER));
// if&(pCounterHandle&==&NULL) return&
//2.PdhCloseQuery:关闭计数器
// pdhStatus&= PdhCloseQuery(hQuery);
// if&(pdhStatus&!=&ERROR_SUCCESS) return&
//3.PdhEnumObjects:枚举计数项目,该函数有6个参数(详细请看MSDN)
//PDH_STATUS&PdhEnumObjects(
LPCTSTR szDataSource, &// 必须为&NULL
LPCTSTR szMachineName, &// 机器名,如果为本机可以为NULL
LPTSTR&mszObjectList, &// 接收全部可用计数项目的缓冲区
LPDWORD pcchBufferLength,&&//&缓冲去大小(如果为 0,则该值返回所需大小)
DWORD&dwDetailLevel, //&获取信息的级别
BOOL&bRefresh
&// 一般设置为&TRUE
LPTSTR&lpcsMachineName= NULL;
LPTSTR&lpsObjectListBuffer&=&NULL;
DWORD&dwObjectListSize&=&0;
//第一步先把缓冲去大小置为0,这样可获得所需缓冲区大小
pdhStatus&= PdhEnumObjects(
&&&lpcsMachineName,
&&&lpsObjectListBuffer,
&&&&dwObjectListSize,
&&&PERF_DETAIL_WIZARD,
if&(pdhStatus&!=&ERROR_SUCCESS&&&&pdhStatus !=&PDH_MORE_DATA)&return&
//得到缓冲区大小后,分配缓存区内存
lpsObjectListBuffer =&(LPTSTR)malloc(dwObjectListSize&+ 1);
if&(lpsObjectListBuffer ==&NULL)&return
//第二步在此调用枚举函数真正开始枚举计数项目
pdhStatus&= PdhEnumObjects(
&&&lpcsMachineName,
&&&lpsObjectListBuffer,
&&&&dwObjectListSize,
&&&PERF_DETAIL_WIZARD,
if&(pdhStatus&!=&ERROR_SUCCESS) return&
//保存缓冲区地址
LPTSTR&lpsthisObject&=&NULL;
lpsthisObject&= lpsObjectListB
//打印所有可用计数项目
if&(dwObjectListSize&0)
for (&; *lpsthisObject&!=&0 ;&lpsthisObject +=&(strlen(lpsthisObject)&+ 1)) {
printf("Object:%s\n",lpsthisObject);
//4.PdhEnumObjectItems:枚举计数器及实例
//PDH_STATUS&PdhEnumObjectItems(
&LPCTSTR&szDataSource,
&&//&必须为NULL
&LPCTSTR&szMachineName,
&&//&机器名,如果为本机可以为NULL
&LPCTSTR&szObjectName,
&&//&计数项目(通过PdhEnumObjects函数可获得所有可用项目)
&LPTSTR mszCounterList,
&&//&计数器缓冲区
&LPDWORD&pcchCounterListLength, &&//&计数器缓冲区大小
&LPTSTR mszInstanceList, &&&//&计数实例缓冲区
&LPDWORD&pcchInstanceListLength,&&&//&计数实例缓冲区大小
&DWORD&dwDetailLevel,
&// 获取信息的级别
&DWORD&dwFlags
//举例:该函数的方法同上一函数(PdhEnumObjects),具体请看MSDN或本文附带的测试工程代码
LPTSTR&mszCounterList=NULL;
LPTSTR&mszInstanceList=NULL;
DWORD&dwCounterListLength=0;
DWORD&dwInstanceListLength=0;
//第一步先把缓冲去大小置为0,这样可获得所需缓冲区大小
pdhStatus&= PdhEnumObjectItems(
lpcsMachineName,
lpsthisObject,
mszCounterList,
&dwCounterListLength,
mszInstanceList,
&dwInstanceListLength,
PERF_DETAIL_WIZARD,
if&(pdhStatus&!=&ERROR_SUCCESS&&&&pdhStatus !=&PDH_MORE_DATA)&return&
//得到缓冲区大小后,分配缓存区内存
mszCounterList&=&(LPTSTR)malloc(dwCounterListLength +&1);
if&(mszCounterList==&NULL)&return&
mszInstanceList=&(LPTSTR)malloc(dwInstanceListLength+&1);
if&(mszInstanceList==&NULL) return&
pdhStatus&= PdhEnumObjectItems(
lpcsMachineName,
lpsthisObject,
mszCounterList,
&dwCounterListLength,
mszInstanceList,
&dwInstanceListLength,
PERF_DETAIL_WIZARD,
if&(pdhStatus&!=&ERROR_SUCCESS) return&
LPTSTR&lpsthisCounter&= NULL;
lpsthisCounter&=&mszCounterL
if&(dwCounterListLength&0)
for (&; *lpsthisCounter !=&0&;&lpsthisCounter&+=&(strlen(lpsthisCounter)&+&1))&{
printf("&&&&Counter:%s\n",lpsthisCounter);
LPTSTR&lpsthisInstance&=&NULL;
lpsthisInstance =&mszInstanceL
if&(dwInstanceListLength&0)
for (&; *lpsthisInstance&!= 0&; lpsthisInstance +=&(strlen(lpsthisInstance) +&1))&{
printf("&&&&Instance:%s\n",lpsthisInstance);
free(mszInstanceList);
free(mszCounterList);
free(lpsObjectListBuffer);
//5.PdhAddCounter:添加计数器
//统计感兴趣的系统信息时,必须先将对应的计数器添加进来
//PDH_STATUS&PdhAddCounter(
// &&&PDH_HQUERY&hQuery, &&//&为PdhOpenQuery打开的句柄
// &&&LPCTSTR&szFullCounterPath,&//&计数器路径(最大长度为&PDH_MAX_COUNTER_PATH)
// &&&DWORD_PTR&dwUserData, //&置为 0
// &&&PDH_HCOUNTER*&phCounter &// 计数器句柄空间(本文中在PdhOpenQuery函数后已分配)
//&已获取winlogon.exe进程的CPU使用率为例
//&通过枚举并查看计数项目说明可以知道&process&项目是和进程有关的项目
//&再通过枚举计数器和事例并查看说明可以知道 process 项目下的%&Processor Time计数器是关于进程CPU使率的
//&最后在计数器事例中看到winlogon进程(表明该进程正在运行)
// pdhStatus&= PdhAddCounter&(hQuery,&"//process(winlogon)//%&Processor&Time",&0,&pCounterHandle);
// if&(pdhStatus&!=&ERROR_SUCCESS) return&
//提示:有些计数器没有实例,比如:要得到系统自启动到现在所运行的秒数,那么该计数项目为System,计数器为System Up&Time,计数器实例为NULL,这时的计数器路径为"/System/System&Up&Time"
//6.PdhCollectQueryData:&准备获取当前数据
// pdhStatus&= PdhCollectQueryData(hQuery);
// if&(pdhStatus&!=&ERROR_SUCCESS)return&
//7.PdhGetFormattedCounterValue:得到数据
// pdhStatus&= PdhGetFormattedCounterValue (pCounterHandle,&PDH_FMT_DOUBLE,
&&&&dwctrType,&&fmtValue);
// if&(pdhStatus&!=&ERROR_SUCCESS) return&
// //&PDH_FMT_DOUBLE表示返回double型数据,当然还可以返回int等类型数据,请查MSDN
// //&获取下一时刻数据
// pdhStatus&= PdhCollectQueryData(hQuery);
// if&(pdhStatus&!=&ERROR_SUCCESS)return&
//提示:pCounterHandle为PdhAddCounter得到的句柄,可以不同的pCounterHandle获得不同计数值
//8.PdhRemoveCounter:移出计数器
//不想获取某项计数值时,应该移出该计数器,已节省资源
// if&(PdhRemoveCounter(pdhCouner) !=&ERROR_SUCCESS)&return&
//该函数参数为计数器句柄
//至此,如果使用计数器实时跟踪系统信息已经讲解完毕。如还有不明白的朋友请详细察看MSDN或与Email:&或&QQ:8573980联系。
//三.最后再附带介绍一个相关API&PdhGetCounterInfo,这个API与使用计数器并无关系,但是,它可以让你明白你所感兴趣的计数器的路径。既它可以得到每个计数器的项目的描述信息(可是中文的哦!)
// //以获取系统自启动到现在所运行的秒数为例
// PDH_COUNTER_INFO&pdhCounterI
// DWORD&dwCounterB
// //添加计数器
// pdhStatus&= PdhAddCounter(hQuery,&"//System//System&Up&Time",&0,&pCounterHandle);
// if&(pdhStatus&!=&ERROR_SUCCESS) return&
// //得到缓冲区大小
// pdhStatus&= PdhGetCounterInfo(*pCounterHandle,&TRUE,&&dwCounterBuffsize,&NULL);
// if&(pdhStatus&!=&ERROR_SUCCESS&&&&pdhStatus !=&PDH_MORE_DATA)&return&
// //设置缓冲区
// BYTE&&* byCounterBuff&= (BYTE&*)malloc(dwCounterBuffsize);
// //获取信息
// pdhStatus&= PdhGetCounterInfo&(*pCounterHandle, TRUE,&&dwCounterBuffsize,&(PPDH_COUNTER_INFO)byCounterBuff);
// if&(pdhStatus&!=&ERROR_SUCCESS) return&
// pdhCounterInfo&=&*&(PPDH_COUNTER_INFO)byCounterB
// //打印得到的信息
// printf(pdhCounterInfo-&szExplainText);
// //以上打印得信息类似:"System&Up&Time&指计算机自上次启动后已经运行的时间(用秒计算)。这个计数值显示启动时间和当前时间之差。"
//全部介绍完毕,希望本文能对大家有所帮助,祝大家愉快。
//example&code:
int ExistSameName(TCHAR *ProcessName)&{
//TODO:判断当前进程列表中有没有同名进程,如果有返回第几个同名进程
char&*RenameEx(char *tmp,int&num)&{
//TODO:在tmp中的字符串末尾添加#num
int GetCPUUsage(TCHAR&*ProcessName) {
*pCounterH
&&&&PDH_STATUS&&&&&&pdhS
&&&&PDH_FMT_COUNTERVALUE&&fmtV
&&&&DWORD&&&&&&&&&&&ctrT
&&&&CHAR&&&&&&&&&&&&szPathBuffer[MAX_PATH];
&&&&int&&&&&&&&&&&&&RetVal&=&0;
&&&&pdhStatus&=&PdhOpenQuery(NULL,&0,&&hQuery);//打开查询对象
&&&&pCounterHandle&=&(HCOUNTER&*)GlobalAlloc(GPTR,&sizeof(HCOUNTER));
&&&&//合成查询字符串
&&&&char&*process&=&NULL;&&&&//处理之后的进程计数器名
&&&&if&(strstr(ProcessName,".exe")&||&strstr(ProcessName,".EXE"))&{
&&&&&&&&//如果是以exe结尾,去掉后缀名
&&&&&&&&int&len&=&strlen(ProcessName)&-&4;
&&&&&&&&char&*&tmp&=new&char&[len&+&6];//为后面#num留出空间
&&&&&&&&memcpy(tmp&,&ProcessName,&len);
&&&&&&&&tmp[len]&=&0;
&&&&&&&&process&=&
&&&&&&&&int&num&=&ExistSameName(ProcessName);&&&&//需要计数
&&&&&&&&if&(num)&{//重名
&&&&&&&&&&&&//如果有同名进程,当前计数器名字改为&"ProcessName#num"
&&&&&&&&&&&&//如&MSDEV.EXE,则有&MSDEV,MSDEV#1,MSDEV#2
&&&&&&&&&&&&process&=&RenameEx(tmp,&num);
&&&&}&else&if&(strcmpi(ProcessName,&"System&Idle&Process"))&{
&&&&&&&&//如果是系统空闲进程,可指定计数器名字为Idle
&&&&&&&&int&len&=&strlen("Idle");
&&&&&&&&char&*&tmp&=&new&char[len&+&1];
&&&&&&&&strncpy(tmp,&"Idle",&len);
&&&&&&&&tmp[len]&=&0;
&&&&&&&&process&=&
&&&&}&else&{
&&&&&&&&//名为System的进程
&&&&&&&&process&=&ProcessN
&&&&sprintf(szPathBuffer,"//Process(%s)//%%&Processor&Time",&process);
&&&&pdhStatus&=&PdhAddCounter(hQuery,&szPathBuffer&,&0&,&pCounterHandle);
&&&&pdhStatus&=&PdhCollectQueryData(hQuery);
&&&&pdhStatus&=&PdhGetFormattedCounterValue&(//获取计数器当前值
&&&&&&&&*pCounterHandle,//计数器句柄
&&&&&&&&PDH_FMT_LONG&|&PDH_FMT_NOSCALE,&&&&&&//format格式
&&&&&&&&&ctrType,&&&&&&&//控制类型
&&&&&&&&&fmtValue);&&&&&//返回值
&&&&if&(pdhStatus&==&ERROR_SUCCESS)&{
&&&&&&&&//fmtValue.doubleValue为所要的结果
&&&&&&&&RetVal&=&fmtValue.longV//&[type:&double,long,string,large]
&&&&}&else&{
&&&&&&&&RetVal&=&0;
&&&&pdhStatus&=&PdhCloseQuery(hQuery);//关闭查询句柄
&&&&return&RetV
int&main()&{
&&&&setlocale(LC_ALL,"chs");
&&&&pdhdump();
&&&&return&0;
解决方案12:
引用&11&楼&zhao4zhong1&的回复:仅供参考:#pragma comment(lib,"pdh")
#include&&stdio.h&
#include&&stdlib.h&
#include&&malloc.h&
#include&&locale.h&
#include&&pdh.h&
#include&&pdhmsg.h&
#include&&tchar.h&
#include&&windows.h&
//一.性能计数器简介:
//系统性能计数器?也许好多朋友没有用过吧!(献丑了)此物可谓功能强大,顾名思义就是可以统计&Windows&系统各项性能指标的东西。在&Windows&2000&及以上系统中,如果是默认安装就会自带性能计数器程序,大家可以在&“控制面板&-〉管理&-〉性能”中看到该程序。
//Windows&系统性能计数器可以实时跟踪上百项系统性能指标,在该系统程序的绘图界面上鼠标右击,选择“添加计数器”就有可能看到所有可统计的项目。常常在论坛里看到一些新朋友问如何自己实现任务管理器,及如何实时获得每个进程的CPU使用率,内存使用...等等,那么我想使用系统性能计数器应该是最佳选择。言归正传,实现方法,请看下文。
//二.具体实现:
//相关API简介及事例代码:
bool&pdhdump()&{
//1.PdhOpenQuery:打开计数器
PDH_STATUS&pdhS
// HQUERY&hQuery&= NULL;
// HCOUNTER&pCounterHandle =&NULL;
// pdhStatus&= PdhOpenQuery(0, 0,&&hQuery);
// if&(pdhStatus&!=&ERROR_SUCCESS) return&
// //分配计数器句柄空间
// pCounterHandle&=&(HCOUNTER&*)GlobalAlloc(GPTR,&sizeof(HCOUNTER));
// if&(pCounterHandle&==&NULL) return&
//2.PdhCloseQuery:关闭计数器
// pdhStatus&= PdhCloseQuery(hQuery);
// if&(pdhStatus&!=&ERROR_SUCCESS) return&
//3.PdhEnumObjects:枚举计数项目,该函数有6个参数(详细请看MSDN)
//PDH_STATUS&PdhEnumObjects(
LPCTSTR szDataSource, &// 必须为&NULL
LPCTSTR szMachineName, &// 机器名,如果为本机可以为NULL
LPTSTR&mszObjectList, &// 接收全部可用计数项目的缓冲区
LPDWORD pcchBufferLength,&&//&缓冲去大小(如果为 0,则该值返回所需大小)
DWORD&dwDetailLevel, //&获取信息的级别
BOOL&bRefresh
&// 一般设置为&TRUE
LPTSTR&lpcsMachineName= NULL;
LPTSTR&lpsObjectListBuffer&=&NULL;
DWORD&dwObjectListSize&=&0;
//第一步先把缓冲去大小置为0,这样可获得所需缓冲区大小
pdhStatus&= PdhEnumObjects(
&&&lpcsMachineName,
&&&lpsObjectListBuffer,
&&&&dwObjectListSize,
&&&PERF_DETAIL_WIZARD,
if&(pdhStatus&!=&ERROR_SUCCESS&&&&pdhStatus !=&PDH_MORE_DATA)&return&
//得到缓冲区大小后,分配缓存区内存
lpsObjectListBuffer =&(LPTSTR)malloc(dwObjectListSize&+ 1);
if&(lpsObjectListBuffer ==&NULL)&return
//第二步在此调用枚举函数真正开始枚举计数项目
pdhStatus&= PdhEnumObjects(
&&&lpcsMachineName,
&&&lpsObjectListBuffer,
&&&&dwObjectListSize,
&&&PERF_DETAIL_WIZARD,
if&(pdhStatus&!=&ERROR_SUCCESS) return&
//保存缓冲区地址
LPTSTR&lpsthisObject&=&NULL;
lpsthisObject&= lpsObjectListB
//打印所有可用计数项目
if&(dwObjectListSize&0)
for (&; *lpsthisObject&!=&0 ;&lpsthisObject +=&(strlen(lpsthisObject)&+ 1)) {
printf("Object:%s\n",lpsthisObject);
//4.PdhEnumObjectItems:枚举计数器及实例
//PDH_STATUS&PdhEnumObjectItems(
&LPCTSTR&szDataSource,
&&//&必须为NULL
&LPCTSTR&szMachineName,
&&//&机器名,如果为本机可以为NULL
&LPCTSTR&szObjectName,
&&//&计数项目(通过PdhEnumObjects函数可获得所有可用项目)
&LPTSTR mszCounterList,
&&//&计数器缓冲区
&LPDWORD&pcchCounterListLength, &&//&计数器缓冲区大小
&LPTSTR mszInstanceList, &&&//&计数实例缓冲区
&LPDWORD&pcchInstanceListLength,&&&//&计数实例缓冲区大小
&DWORD&dwDetailLevel,
&// 获取信息的级别
&DWORD&dwFlags
//举例:该函数的方法同上一函数(PdhEnumObjects),具体请看MSDN或本文附带的测试工程代码
LPTSTR&mszCounterList=NULL;
LPTSTR&mszInstanceList=NULL;
DWORD&dwCounterListLength=0;
DWORD&dwInstanceListLength=0;
//第一步先把缓冲去大小置为0,这样可获得所需缓冲区大小
pdhStatus&= PdhEnumObjectItems(
lpcsMachineName,
lpsthisObject,
mszCounterList,
&dwCounterListLength,
mszInstanceList,
&dwInstanceListLength,
PERF_DETAIL_WIZARD,
if&(pdhStatus&!=&ERROR_SUCCESS&&&&pdhStatus !=&PDH_MORE_DATA)&return&
//得到缓冲区大小后,分配缓存区内存
mszCounterList&=&(LPTSTR)malloc(dwCounterListLength +&1);
if&(mszCounterList==&NULL)&return&
mszInstanceList=&(LPTSTR)malloc(dwInstanceListLength+&1);
if&(mszInstanceList==&NULL) return&
pdhStatus&= PdhEnumObjectItems(
lpcsMachineName,
lpsthisObject,
mszCounterList,
&dwCounterListLength,
mszInstanceList,
&dwInstanceListLength,
PERF_DETAIL_WIZARD,
if&(pdhStatus&!=&ERROR_SUCCESS) return&
LPTSTR&lpsthisCounter&= NULL;
lpsthisCounter&=&mszCounterL
if&(dwCounterListLength&0)
for (&; *lpsthisCounter !=&0&;&lpsthisCounter&+=&(strlen(lpsthisCounter)&+&1))&{
printf("&&&&Counter:%s\n",lpsthisCounter);
LPTSTR&lpsthisInstance&=&NULL;
lpsthisInstance =&mszInstanceL
if&(dwInstanceListLength&0)
for (&; *lpsthisInstance&!= 0&; lpsthisInstance +=&(strlen(lpsthisInstance) +&1))&{
printf("&&&&Instance:%s\n",lpsthisInstance);
free(mszInstanceList);
free(mszCounterList);
free(lpsObjectListBuffer);
//5.PdhAddCounter:添加计数器
//统计感兴趣的系统信息时,必须先将对应的计数器添加进来
//PDH_STATUS&PdhAddCounter(
// &&&PDH_HQUERY&hQuery, &&//&为PdhOpenQuery打开的句柄
// &&&LPCTSTR&szFullCounterPath,&//&计数器路径(最大长度为&PDH_MAX_COUNTER_PATH)
// &&&DWORD_PTR&dwUserData, //&置为 0
// &&&PDH_HCOUNTER*&phCounter &// 计数器句柄空间(本文中在PdhOpenQuery函数后已分配)
//&已获取winlogon.exe进程的CPU使用率为例
//&通过枚举并查看计数项目说明可以知道&process&项目是和进程有关的项目
//&再通过枚举计数器和事例并查看说明可以知道 process 项目下的%&Processor Time计数器是关于进程CPU使率的
//&最后在计数器事例中看到winlogon进程(表明该进程正在运行)
// pdhStatus&= PdhAddCounter&(hQuery,&"//process(winlogon)//%&Processor&Time",&0,&pCounterHandle);
// if&(pdhStatus&!=&ERROR_SUCCESS) return&
//提示:有些计数器没有实例,比如:要得到系统自启动到现在所运行的秒数,那么该计数项目为System,计数器为System Up&Time,计数器实例为NULL,这时的计数器路径为"/System/System&Up&Time"
//6.PdhCollectQueryData:&准备获取当前数据
// pdhStatus&= PdhCollectQueryData(hQuery);
// if&(pdhStatus&!=&ERROR_SUCCESS)return&
//7.PdhGetFormattedCounterValue:得到数据
// pdhStatus&= PdhGetFormattedCounterValue (pCounterHandle,&PDH_FMT_DOUBLE,
&&&&dwctrType,&&fmtValue);
// if&(pdhStatus&!=&ERROR_SUCCESS) return&
// //&PDH_FMT_DOUBLE表示返回double型数据,当然还可以返回int等类型数据,请查MSDN
// //&获取下一时刻数据
// pdhStatus&= PdhCollectQueryData(hQuery);
// if&(pdhStatus&!=&ERROR_SUCCESS)return&
//提示:pCounterHandle为PdhAddCounter得到的句柄,可以不同的pCounterHandle获得不同计数值
//8.PdhRemoveCounter:移出计数器
//不想获取某项计数值时,应该移出该计数器,已节省资源
// if&(PdhRemoveCounter(pdhCouner) !=&ERROR_SUCCESS)&return&
//该函数参数为计数器句柄
//至此,如果使用计数器实时跟踪系统信息已经讲解完毕。如还有不明白的朋友请详细察看MSDN或与Email:&或&QQ:8573980联系。
//三.最后再附带介绍一个相关API&PdhGetCounterInfo,这个API与使用计数器并无关系,但是,它可以让你明白你所感兴趣的计数器的路径。既它可以得到每个计数器的项目的描述信息(可是中文的哦!)
// //以获取系统自启动到现在所运行的秒数为例
// PDH_COUNTER_INFO&pdhCounterI
// DWORD&dwCounterB
// //添加计数器
// pdhStatus&= PdhAddCounter(hQuery,&"//System//System&Up&Time",&0,&pCounterHandle);
// if&(pdhStatus&!=&ERROR_SUCCESS) return&
// //得到缓冲区大小
// pdhStatus&= PdhGetCounterInfo(*pCounterHandle,&TRUE,&&dwCounterBuffsize,&NULL);
// if&(pdhStatus&!=&ERROR_SUCCESS&&&&pdhStatus !=&PDH_MORE_DATA)&return&
// //设置缓冲区
// BYTE&&* byCounterBuff&= (BYTE&*)malloc(dwCounterBuffsize);
// //获取信息
// pdhStatus&= PdhGetCounterInfo&(*pCounterHandle, TRUE,&&dwCounterBuffsize,&(PPDH_COUNTER_INFO)byCounterBuff);
// if&(pdhStatus&!=&ERROR_SUCCESS) return&
// pdhCounterInfo&=&*&(PPDH_COUNTER_INFO)byCounterB
// //打印得到的信息
// printf(pdhCounterInfo-&szExplainText);
// //以上打印得信息类似:"System&Up&Time&指计算机自上次启动后已经运行的时间(用秒计算)。这个计数值显示启动时间和当前时间之差。"
//全部介绍完毕,希望本文能对大家有所帮助,祝大家愉快。
//example&code:
int ExistSameName(TCHAR *ProcessName)&{
//TODO:判断当前进程列表中有没有同名进程,如果有返回第几个同名进程
char&*RenameEx(char *tmp,int&num)&{
//TODO:在tmp中的字符串末尾添加#num
int GetCPUUsage(TCHAR&*ProcessName) {
*pCounterH
&&&&PDH_STATUS&&&&&&pdhS
&&&&PDH_FMT_COUNTERVALUE&&fmtV
&&&&DWORD&&&&&&&&&&&ctrT
&&&&CHAR&&&&&&&&&&&&szPathBuffer[MAX_PATH];
&&&&int&&&&&&&&&&&&&RetVal&=&0;
&&&&pdhStatus&=&PdhOpenQuery(NULL,&0,&&hQuery);//打开查询对象
&&&&pCounterHandle&=&(HCOUNTER&*)GlobalAlloc(GPTR,&sizeof(HCOUNTER));
&&&&//合成查询字符串
&&&&char&*process&=&NULL;&&&&//处理之后的进程计数器名
&&&&if&(strstr(ProcessName,".exe")&||&strstr(ProcessName,".EXE"))&{
&&&&&&&&//如果是以exe结尾,去掉后缀名
&&&&&&&&int&len&=&strlen(ProcessName)&-&4;
&&&&&&&&char&*&tmp&=new&char&[len&+&6];//为后面#num留出空间
&&&&&&&&memcpy(tmp&,&ProcessName,&len);
&&&&&&&&tmp[len]&=&0;
&&&&&&&&process&=&
&&&&&&&&int&num&=&ExistSameName(ProcessName);&&&&//需要计数
&&&&&&&&if&(num)&{//重名
&&&&&&&&&&&&//如果有同名进程,当前计数器名字改为&"ProcessName#num"
&&&&&&&&&&&&//如&MSDEV.EXE,则有&MSDEV,MSDEV#1,MSDEV#2
&&&&&&&&&&&&process&=&RenameEx(tmp,&num);
&&&&}&else&if&(strcmpi(ProcessName,&"System&Idle&Process"))&{
&&&&&&&&//如果是系统空闲进程,可指定计数器名字为Idle
&&&&&&&&int&len&=&strlen("Idle");
&&&&&&&&char&*&tmp&=&new&char[len&+&1];
&&&&&&&&strncpy(tmp,&"Idle",&len);
&&&&&&&&tmp[len]&=&0;
&&&&&&&&process&=&
&&&&}&else&{
&&&&&&&&//名为System的进程
&&&&&&&&process&=&ProcessN
&&&&sprintf(szPathBuffer,"//Process(%s)//%%&Processor&Time",&process);
&&&&pdhStatus&=&PdhAddCounter(hQuery,&szPathBuffer&,&0&,&pCounterHandle);
&&&&pdhStatus&=&PdhCollectQueryData(hQuery);
&&&&pdhStatus&=&PdhGetFormattedCounterValue&(//获取计数器当前值
&&&&&&&&*pCounterHandle,//计数器句柄
&&&&&&&&PDH_FMT_LONG&|&PDH_FMT_NOSCALE,&&&&&&//format格式
&&&&&&&&&ctrType,&&&&&&&//控制类型
&&&&&&&&&fmtValue);&&&&&//返回值
&&&&if&(pdhStatus&==&ERROR_SUCCESS)&{
&&&&&&&&//fmtValue.doubleValue为所要的结果
&&&&&&&&RetVal&=&fmtValue.longV//&[type:&double,long,string,large]
&&&&}&else&{
&&&&&&&&RetVal&=&0;
&&&&pdhStatus&=&PdhCloseQuery(hQuery);//关闭查询句柄
&&&&return&RetV
int&main()&{
&&&&setlocale(LC_ALL,"chs");
&&&&pdhdump();
&&&&return&0;
这段代码我测试过了结果全是0。
上面代码的查询语句里面的/应该是\,CPU的收集数据应该sleep一会然后再收集一次。
修正之后CPU值开始从0-100波动。而任务管理器里面始终在10%左右。
解决方案13:
r(st)q,我还是找了个开源代码的方法。它使用次数的增量*1000/采集间隔时间做的。谢谢两位的解答。
解决方案14:
您好,关于磁盘读写速率问题,最后的开源代码,您是从哪&找的,可以发我一份吗,谢谢。
解决方案15:
楼主,想问下你最后问题是如何解决的?
我现在也要做一个类似任务管理器的东西,给定进程ID,获取进程的句柄数,线程数,磁盘IO和网络IO.
楼主方便把代码分享给我看一下吗?我的邮箱:
解决方案16:
楼主我也想要啊,我也在做类似的东西,就差网卡联网状态和网卡读写速度了.
我用pdh获取不了网卡读写数据或者说我得不到正确的网卡名,所以读取失败.
楼主你有办法获取正确的网卡名么?
本文相关:}

我要回帖

更多关于 民间功夫高手实战视频 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信