Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re: Inter-Process Communication

by perigeeV (Hermit)
on Jul 21, 2002 at 02:45 UTC ( #183730=note: print w/replies, xml ) Need Help??


in reply to Inter-Process Communication

Win32::Pipe will let you establish a bidirectional named pipe. I guess the question becomes: can you establish a named pipe in server context with your win32 app? If so, then your win32 app sets up a pipe as a server, and your Perl script calls

if( $Pipe = new Win32::Pipe( $PipeName ) ) { # talk... } else { # continue polling. The client's call failed. }

That way your win32 app is blocking, but your Perl app isn't.


Replies are listed 'Best First'.
Re: Re: Inter-Process Communication
by Nitrox (Chaplain) on Jul 21, 2002 at 03:08 UTC
    Unfortunately the win32 app is a Home Automation engine that currently doesn't execute its scripts in a separate thread, so I can't put it in a blocked state either.

    -Nitrox

      OK, some other ideas:

      Set up some shared memory. Most of the CPAN stuff is SYSV based, but perhaps use Cache::Cache.

      Or perhaps have your Win32 app write the data to a normal file, and then send a signal to the perl process. Put a signal handler in the script so that it knows when it is time to read the file.


        Thanks for the tip perigeeV I think I found my solution, albeit not as elegant as I had hoped.

        I couldn't use the shared memory function because IPC::ShareLite won't compile on Win32 and is required. But Cache::Cache will still compile with it.

        So my solution is to use Cache::FileCache. I've include two quick proof of concept scripts to demonstrate:

        First run the 'writer':

        # Program 1 use Cache::FileCache; my $cache = new Cache::FileCache({ 'namespace' => 'SharedCache', 'defa +ult_expires_in' => 600 } ); my $passed_data = "This is a passed string"; $cache->set( "Data", $passed_data, "10 minutes" );
        Then run the 'reader':
        #Program 2 use Cache::FileCache; my $cache = new Cache::FileCache( { 'namespace' => 'SharedCache', 'def +ault_expires_in' => 600 } ); my $passed_data = $cache->get("Data"); print "$passed_data\n";
        Looks like a winner, and only after about 18hrs of banging my head against the pile of soda cans on my desk!

        -Nitrox

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://183730]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (3)
As of 2022-12-03 10:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?