Forum > Linux

Does anybody have CPU usage example code for Raspberry AND win32

(1/1)

pascalbythree:
Hey i am looking for example code / fucntion or procedure. To read the CPU usage. I do have running versions from this forum, but they only see to work for Win32.

I am cross compiling from win32 to ARM. So they need to work both.

Further i do not like txt file reading or a TProcess

Anybody got help?

Greets, Wouter van Wegen

PS: It is for a Raspberry model 3

PascalDragon:
It's less relevant that your compiling for ARM, but that your compiling for a different operating system, namely Linux (assuming you don't use Windows on ARM on your Pi), so you should search for how to retrieve the CPU usage on Linux (Hint: it's often called “system load” or similar, though that will be the total load across all cores).

And you'll simply have to ifdef your code and provide a suitable cross platform abstraction. Or maybe you'll find a cross platform abstraction, who knows. ;)

Thausand:
https://forum.lazarus.freepascal.org/index.php/topic,59344.msg442437.html#msg442437

MarkMLl:
Please don't open duplicate posts. Somebody's already suggested a library in response to your earlier https://forum.lazarus.freepascal.org/index.php/topic,59344.msg442391.html#msg442391


--- Quote from: pascalbythree on May 24, 2022, 08:53:25 pm ---I am cross compiling from win32 to ARM. So they need to work both.

--- End quote ---

Why? if you're /cross/ compiling then only the target matters so


--- Quote ---PS: It is for a Raspberry model 3

--- End quote ---

...that's what matters, the RPi /does/ have capabilities for getting at voltages etc. but if you start messing around with those all hope of something portable goes out of the window.


--- Quote ---Further i do not like txt file reading

--- End quote ---

Tough, since utilities like top and ps refer to items in the /proc filesystem rather than having a binary API. However that is NOT a real directory and you are NOT reading real text files.

MarkMLl

BobDog:

For windows, using the command line (wmic for example), itself takes a chunk of cpu every second.
The winapi method uses very little.
Sorry I don't have Linux, or know the Linux method, but I have a notion it might be easier than the Windows method.
But, if it is of any use to you, here is a winapi method.

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---useswindows,jwawinbase; Function getsystemtime_CPU(var totalTime:qword;var idleTime:qword): boolean;varftSysIdle, ftSysKernel, ftSysUser:filetime;sysKernel, sysUser, sysIdle:ularge_integer;        begin        If ((GetSystemTimes(@ftSysIdle, @ftSysKernel, @ftSysUser))=false) Then exit (false);        sysKernel.HighPart := ftSysKernel.dwHighDateTime;        sysKernel.LowPart := ftSysKernel.dwLowDateTime;        sysUser.HighPart := ftSysUser.dwHighDateTime;        sysUser.LowPart := ftSysUser.dwLowDateTime;        sysIdle.HighPart := ftSysIdle.dwHighDateTime;        sysIdle.LowPart := ftSysIdle.dwLowDateTime;        totalTime := sysKernel.QuadPart + sysUser.QuadPart;        idleTime := sysIdle.QuadPart;        exit(True);End; procedure cpu;vartotalprev:qword=0;totalcurr:qword=0;idleprev:qword=0;idlecurr:qword=0;total,idle:qword;usage:integer;s,use:ansistring;beginWhile True dobegins:='';total:=0;idle:=0; Sleep(1000); If ((getSystemtime_CPU(totalCurr, idleCurr))=true) Then        begin        total := totalCurr - totalPrev;        if (total>0) then        begin        idle := idleCurr - idlePrev;        usage:=trunc(100 * (total - idle) / (total));        Setlength(S,usage);          FillChar(S[1],usage,'*');           str(usage :3,use);        writeln('  ',use,' %','  ',s);        end;        totalPrev := totalCurr;        idlePrev := idleCurr;        end;    end;end;   begincpu;end. 
Just click off the console when you are done.

Navigation

[0] Message Index

Go to full version