# GlxShMem # this is an replacement for an old SysV IPC shm package ported to Win package GlxShMem; use Win32::MMF::Shareable; sub alloc { my $class = shift; my $value = @_ ? shift : ''; my $self = bless { OWNER => $$, } => $class; my %options = ( create => 1, exclusive => 1, mode => 0666, destroy => 1, reuse => 1, autolock => 1, ); $self->{SHMKEY} = $self; $self->{SHMKEY} =~ s/(\(.+\))/$1/; $self->{SHMKEY} = $1; $self->{SHMKEY} =~ s/\(|\)//g; $self->{SHMKEY} =~ s/0x//; while ($self->{SHMKEY} =~ s/\D/$1/) { my $h = ord($1); $self->{SHMKEY} =~ s/\D/$h/; } tie $self->{DATA}, 'Win32::MMF::Shareable', $self->{SHMKEY}, {%options} or die 'GlxShMem->alloc() : Tie failed\n'; $self->{DATA} = $value; return $self; } sub get { my $self = shift; return $self->{DATA}; } sub put { my $self = shift; if ($debug) { my %options = ( create => 0, exclusive => 0, mode => 0666, destroy => 1, reuse => 1, autolock => 1, ); my $ns=tie $self->{DATA}, 'Win32::MMF::Shareable', self->{SHMKEY}, {%options} or die 'debug : Tie failed\n'; $ns->debug(); } $self->{DATA} = shift; } sub DESTROY { my $self = shift; return unless $self->{OWNER} == $$; (tied $self->{DATA})->deletevar($self->{DATA}); } 1; ### end GlxShMem