vxworks获得CPU使用情况

#include <vxWorks.h>
#include <spyLib.h>
#include <stdio.h>
#include <ioLib.h>
#include <stdarg.h>
#include <taskLib.h>
#include <sysLib.h>
#include <string.h>



#define SPYTASKSMAX 100


int data_ana(const char*,...);

/*	函数功能:	检测CPU使用率并调用data_ana函数进行处理,最后将使用率打印在shell 上,也可通过重定向打印
 *              在别的位置,main函数直接调用该函数即可
 * 	输入参数:	
 * 	返回值:		0
 */
int CPU_utilization(void)
{
	spyLibInit(SPYTASKSMAX);//初始化spy,最大可spy任务数为SPYTASKSMAX
	spyCommon(5,100,(FUNCPTR)data_ana);//此例程收集任务活动数据并定期运行spyReport()。数据每秒被收集几次,每几秒钟都会生成一个报告。如果freq为零,则默认为5秒。如果ticksPerSec被省略或为零,则默认为100s
	return 0;
}

/*	函数功能:	可以向不同ip地址发送udp信息
 * 	输入参数:	const char* fmtPtn,...  该参数为不定长参数,其所有参数类型均为const char*,通过
 *              v1指针循环赋给rbuf,从而得到spy函数在shell上输出的每行内容,从而在经过处理行内容
 *              后得到cpu的使用率
 * 	返回值:		0
 */
int data_ana(const char* fmtPtn,...)
{
	char rbuf[256];
	const char* IDEL = "IDLE";
	char percent[50];
	int i=0;
	int j=0;
	int p;
	va_list vl;
	va_start(vl,fmtPtn);
	vsprintf(rbuf,fmtPtn,vl);  //将v1按格式fmtptn写入字符串buf中,得到一行字符串。

	if(strstr(rbuf,IDEL)!= NULL)
		/*
		 IDLE占用率表示cpu空闲占比,spy输出信息中,有一行是idel的值,得到该值后用100减去它,就得到cpu使用率
	 */
	{
		printf("%s\n",rbuf);

		for(i=0;(i<256)&&(rbuf[i] != '%');i++)
		{
	
			if(rbuf[i]>='0'&&rbuf[i]<='9')
				{
					percent[j] = rbuf[i];
					j++;
				}
		}
		percent[j]='\0';
		//printf("CPU free percent= %s \n",percent);
		p=atoi(percent);
		printf("CPU use percent= %i%%\n",100-p);
	}
	va_end(vl);
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章