#! perl -slw use strict; use Win32::API::Prototype; ApiLink( 'kernel32', q[ BOOL GetSystemTimes( LPFILETIME lpIdleTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime ) ] ) or die $^E; sub SystemTimes { my( $idleTicks, $kernelTicks, $userTicks ) =( chr( 0 ) x 8 ) x 3; GetSystemTimes( $idleTicks, $kernelTicks, $userTicks ) or die $^E; return map{ my( $lo, $hi ) = unpack 'VV', $_; ( $hi * 2**32 + $lo ); } $idleTicks, $kernelTicks, $userTicks; } use constant { IDLE=>0, KERNEL=>1, USER=>2 }; $|=1; my @last = SystemTimes; while( sleep 1 ) { my @now = SystemTimes; my @deltas = map{ $now[ $_ ] - $last[ $_ ] } IDLE, KERNEL, USER; my $busy = $deltas[ KERNEL ] + $deltas[ USER ]; my $pcUsage = ( $busy - $deltas[ IDLE ] )* 100 /( $deltas[ IDLE ] || 100e5 ); printf "\rCPU usage(%%): %6.3f ", $pcUsage; @last = @now; } __END__ C:\test>SysTimes.pl CPU usage(%): 25.490