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;
}

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