use threads; use threads::shared; use Carp; use Config::Simple; use Win32::OLE('in'); my $memory_use; my %c; BEGIN { share($memory_use); tie %c, 'Config::Simple', 'lifevis.cfg'; sub update_memory_use { my @state_array; my $pid = $PROCESS_ID; my $sleep_time = ( $c{sync_delay} * $c{full_update_offset} ) / 1000; my $WMI_service_object = Win32::OLE->GetObject("winmgmts:\\\\.\\root\\CIMV2") or croak "WMI connection failed.\n"; while (1) { @state_array = in $WMI_service_object->ExecQuery( 'SELECT PrivatePageCount FROM Win32_Process' . " WHERE ProcessId = $pid", 'WQL', 0x10 | 0x20 ); $memory_use = $state_array[0]->{PrivatePageCount}; sleep $sleep_time; } return 1; } my $thr = threads->create( \&update_memory_use ); $thr->detach(); } use OpenGL qw/ :all /;