#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;
}
vxworks獲得CPU使用情況
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.