cpuload.c
来自「Vxworks下的C例子程序」· C语言 代码 · 共 90 行
C
90 行
typedef struct cpuUsage { SEM_ID startSem; int didNotComplete; unsigned long ticksNoContention; int nBurnNoContention; unsigned long ticksNow; int nBurnNow; double usage;} cpuUsage;static cpuUsage *pcpuUsage=0;static double cpuBurn(){ int i; double result = 0.0; for(i=0;i<5; i++) result += sqrt((double)i); return(result);}static void cpuUsageTask(){ while(TRUE) { int i; unsigned long tickStart,tickEnd; semTake(pcpuUsage->startSem,WAIT_FOREVER); pcpuUsage->ticksNow=0; pcpuUsage->nBurnNow=0; tickStart = tickGet(); for(i=0; i< pcpuUsage->nBurnNoContention; i++) { cpuBurn(); pcpuUsage->ticksNow = tickGet() - tickStart; ++pcpuUsage->nBurnNow; } tickEnd = tickGet(); pcpuUsage->didNotComplete = FALSE; pcpuUsage->ticksNow = tickEnd - tickStart; }}static double getCpu(){ if(pcpuUsage->didNotComplete && pcpuUsage->nBurnNow==0) { pcpuUsage->usage = 0.0; } else { double temp; double ticksNow,nBurnNow; ticksNow = (double)pcpuUsage->ticksNow; nBurnNow = (double)pcpuUsage->nBurnNow; ticksNow *= (double)pcpuUsage->nBurnNoContention/nBurnNow; temp = ticksNow - (double)pcpuUsage->ticksNoContention; temp = 100.0 * temp/ticksNow; if(temp<0.0 || temp>100.0) temp=0.0; /*handle tick overflow*/ pcpuUsage->usage = temp; } pcpuUsage->didNotComplete = TRUE; semGive(pcpuUsage->startSem); return(pcpuUsage->usage);}static void cpuUsageInit(void){ unsigned long tickStart,tickNow; int nBurnNoContention=0; int ticksToWait; ticksToWait = SECONDS_TO_BURN*sysClkRateGet(); pcpuUsage = calloc(1,sizeof(cpuUsage)); tickStart = tickGet(); /*wait for a tick*/ while(tickStart==(tickNow = tickGet())) {;} tickStart = tickNow; while(TRUE) { if((tickGet() - tickStart)>=ticksToWait) break; cpuBurn(); nBurnNoContention++; } pcpuUsage->nBurnNoContention = nBurnNoContention; pcpuUsage->startSem = semBCreate (SEM_Q_FIFO,SEM_EMPTY); pcpuUsage->ticksNoContention = ticksToWait; pcpuUsage->didNotComplete = TRUE; taskSpawn("cpuUsageTask",255,VX_FP_TASK,1000,(FUNCPTR)cpuUsageTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?