use IPC::Shareable;
# simple method
tie( $scalar, 'IPC::Shareable', 'varid' );
# complex method
tie( $scalar, 'IPC::Shareable', 'varid', { ...options... } ); # OR
tie( $scalar, 'IPC::Shareable', { key => 'varid', ...options... } );
####
use Win32::MMF::Shareable;
# simple method
tie( $scalar, 'Win32::MMF::Shareable', 'varid' );
# automatically creates a namespace using default options
# complex method
tie( $scalar, 'Win32::MMF::Shareable', 'varid', { ...options... } ); # OR
tie( $scalar, 'Win32::MMF::Shareable', { key => 'varid', ...options... } );
# for compatibility
##
##
use Win32::MMF::Shareable;
# BAD
tie( $bigvar1, 'Win32::MMF::Shareable', 'bigvar1', { autolock => 0, size => 1024 ** 2 } );
tie( $bigvar2, 'Win32::MMF::Shareable', 'bigvar2', { autolock => 0, size => 1024 ** 2 } );
tie( $bigvar3, 'Win32::MMF::Shareable', 'bigvar3', { autolock => 0, size => 1024 ** 2 } );
# GOOD
Win32::MMF::Shareable->setdefaults( { autolock => 0, size => 1024 ** 2 } );
tie( $bigvar1, 'Win32::MMF::Shareable', 'bigvar1' );
tie( $bigvar2, 'Win32::MMF::Shareable', 'bigvar2' );
tie( $bigvar3, 'Win32::MMF::Shareable', 'bigvar3' );
##
##
tie( $scalar, 'Win32::MMF::Shareable', { namespace => 'ns1', key => 'foo' } );
tie( $scalar, 'Win32::MMF::Shareable', { namespace => 'ns1', key => 'bar' } );
tie( $scalar, 'Win32::MMF::Shareable', { namespace => 'ns2', key => 'foo' } );
tie( $scalar, 'Win32::MMF::Shareable', { namespace => 'ns2', key => 'bar' } );
##
##
# Process 1
use Win32::MMF::Shareable;
my @queue;
tie( @queue, 'Win32::MMF::Shareable', 'queue' );
@queue = qw( 8265 6201 7548 2165 7892 3546 3426 6246 );
# Process 2
use Win32::MMF;
my $ns = Win32::MMF->new( -namespace => "my_namespace" );
$ns->setvar( fredsname => 'fred' );
my $fredsname = $ns->getvar( 'fredsname' );
# etc... as normal
# get the current value of another processes tied variable!
my $server = Win32::MMF->new( -namespace => "shareable", reuse => 1 );
my @current_queue = $server->getvar( 'queue' );
##
##
tie( $var, 'Win32::MMF::Shareable', 'var' ); # OR
tie( $var, 'Win32::MMF::Shareable', 'var', { connect => 'auto' } ); # map if already available, otherwise create
tie( $var, 'Win32::MMF::Shareable', 'var', { connect => 1 } ); # must already exist
tie( $var, 'Win32::MMF::Shareable', 'var', { connect => 0 } ); # must not already exist
##
##
$data = tie( %data, 'Win32::MMF::Shareable', 'data', { timeout => 60 } );
if( $data->{error} ) { die( “can't tie data: ” . $data->{errstr} ) } # maybe? or just return undef
$data{min} = 0;
$data{max} = 500;
$data{current} = 0;
$data->debug() if $debug_flag;
# each process must do blocks of 10 at a time
{
$data->lock(); # timeout 60 seconds
for( $data{end} = $data{current} + 10; $data{current} < $data{end}; $data{current}++ )
{
# do job number $data{current}
}
$data->unlock();
}
##
##
use japh; print;