The following example demonstrates how to retrieve CPU utilization statistics for a specifically targeted task.
#include <stdio.h> #include <conio.h> #include "OS_API.h" #define TASK_COUNT 10 ERROR WorkerTask(PVOID Arg) { TIME Time; /* Start after specified time */ osSleep(((int) Arg) * AR_TICKS_PER_SECOND / 10); /* Show counters value for every 1/10 of second */ while(1) { /* Perform a long job for 1 seconds */ Time = arGetTickCount(); while(1) if(arGetTickCount() >= (Time + 1 * AR_TICKS_PER_SECOND)) break; /* Sleep for one second */ osSleep(1 * AR_TICKS_PER_SECOND); } } ERROR MainTask(PVOID Arg) { int i; HANDLE Tasks[TASK_COUNT]; INDEX TotalTime, CPUTime; /* Mark parameter as unused */ AR_UNUSED_PARAM(Arg); /* Create tasks */ for(i = 0; i < TASK_COUNT; i++) Tasks[i] = osCreateTask(WorkerTask, (PVOID) i, 0, 1, FALSE); /* Infinite loop */ while(1) { /* Display statistic after every 100 milliseconds */ osSleep(AR_TICKS_PER_SECOND / 10); /* Print working tasks statistics */ for(i = 0; i < TASK_COUNT; i++) { osGetTaskStat(Tasks[i], &CPUTime, &TotalTime); gotoxy(1, 1 + i); printf("Task %i: %i %% ", i, (int) (100 * CPUTime / TotalTime)); } } } int main(void) { /* Initialization */ arInit(); stInit(); osInit(); /* Create main task */ osCreateTask(MainTask, NULL, 0, 0, FALSE); /* Start the operating system */ osStart(); /* Deinitialization */ osDeinit(); arDeinit(); return 0; }