Code archives/Miscellaneous/CPU Info

This code has been declared by its author to be Public Domain code.

Download source code

CPU Info by BlitzSupport
(Posted 24 years ago)
This DLL, written especially for Blitz, can return:

· Processor model name
· Processor speed
· Current CPU usage

Note that it won't work on 486 or lesser processors! I'd be interested to hear what exactly it *does* do there, at your own risk ;)

Download the Blitz code and 11k DLL (with PB source) here (7k ZIP) -- feel free to use and modify it for any purpose you see fit.
; [This code is in the ZIP file above, which you'll need!]

; You can change this if you want to rename the DLL :)

Global dll$ = "blitzcpu.dll"

; -----------------------------------------------------------------------------
; CPUName$: Returns a string containing the hardware-encoded name of the CPU...
; -----------------------------------------------------------------------------

; NOTES: Just call it once, and store the result in a string, as it makes 2
; calls to the DLL per call (necessary, unfortunately).

; Uses a modified procedure by RINGS (from http://www.reelmediaproductions.com/pb/ ).

Function CPUName$ ()
	size = CallDLL (dll$, "_FindCPUNameLength")
	If size
		bank = CreateBank (size)
		result = CallDLL (dll$, "_CPUName", bank)
		If result
			For a = 1 To size
				cpu$ = cpu$ + Chr (PeekByte (bank, a - 1))
			Next
		EndIf
	EndIf
	FreeBank bank
	Return cpu$
End Function

; -----------------------------------------------------------------------------
; CPUSpeed: Returns the speed of the CPU, in MHz (takes 1 second to return)...
; -----------------------------------------------------------------------------

; NOTES: This takes 1 second to return, so just call it once and store the
; result in an integer variable. It works correctly on 99% of CPUs.

; Code adapted from public C/C++/C# source posted in various articles by ZEESHAN AMJAD.

Function CPUSpeed ()
	Return CallDLL (dll$, "_CPUSpeed")
End Function

; -----------------------------------------------------------------------------
; CPUName$: Returns the current CPU usage, as percentage of CPU time used...
; -----------------------------------------------------------------------------

; NOTES: Returns current CPU usage % and apparently works properly on both
; 9x and 2000 (I can confirm it gets the correct amount -/+ a couple of percent
; in 2000). Note that in Blitz, you'll generally be running at 100% all the time,
; but this will allow you to judge appropriate delays in your loop so that
; windowed games can play nicely with other desktop programs... probably best
; called on a timer (eg. once every second).

; Uses a PB library created by DANILO (from http://www.reelmediaproductions.com/pb/ ).

Function CPUUsage ()
	Return CallDLL (dll$, "_CPUPercent")
End Function

; D E M O . . .

AppTitle "CPU Information"

Graphics 640, 480, 0, 2
SetBuffer BackBuffer ()

cpu$ = CPUName () ; Get hard-coded CPU name...
mhz = CPUSpeed () ; CPUSpeed () takes 1 second to return information (so don't call in a loop ;)

Repeat

	Cls
	
	Color 0, 255, 0
	Locate 20, 20: Write "CPU: "
	Color 255, 255, 255
	Write cpu$
	Color 0, 255, 0
	Write " running at "
	Color 255, 255, 255
	Write mhz
	Color 0, 255, 0
	Write " MHz"
	
	Locate 20, 60: Write "Current CPU usage: "
	Color 255, 255, 255
	Write CPUUsage ()
	Color 0, 255, 0
	Write" %"
	
	Delay 1000 ; Allows our program to avoid running at 100%
	Flip
	
Until (KeyHit (1)) Or (MouseHit (1))

End