Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much

Re: Communication between seperate scripts

by elwarren (Curate)
on Apr 06, 2004 at 15:43 UTC ( #342974=note: print w/replies, xml ) Need Help??

in reply to Communication between seperate scripts

Shared memory or pipes are going to be your best bets if you want to avoid the network. You can attach several processes to a shared chunk of memory and everyone will see the same data at the same time.

I previously wrote an app that basically shares a highspeed serial port over the network to another machine. It used UDP for fast communications, no time for lag. Again, this worked on unix and I know that there has been mention of differences in time precision on windows.

When I researched this project a couple years ago I found several daemons to do port sharing on Many of them were written in C and some of them allowed sharing ports between windows and unix machines. There is a standard to do this and these apps had (were supposed to) better signal handling and such. I still ended up using my own because it worked and it was fast and I never had a problem.

Win32::MMF does the work of this for you. You can either address the memory space as a file or you can tie variables. This is probably what you want to do.

I haven't done anything with pipes on windows, just unix, can't comment.

Just checked the perldoc for Win32::MMF and the example shows inter-process signalling. I'd just merge that with your code to read the parallel lines status. Looks like a perfect fit.
  • Comment on Re: Communication between seperate scripts

Replies are listed 'Best First'.
Re: Re: Communication between seperate scripts
by Jouke (Curate) on Apr 06, 2004 at 16:04 UTC
    Right. Just what the doctor if there was a way to make it work on Win98 machines too, my happiness would be complete :) elwarren++

    Jouke Visser, Perl 'Adept'
    Using Perl to help the disabled: pVoice and pStory
      Somewhat dated, but a good in-depth discussion on Windows MMF can be found here: might come useful should you like to try and add Win98 support to Win32::MMF yourself (not everything can be done, but MMF existed already in Win3.11 IIRC). That will require some 'dirty' work with XS and C, but the module author would probably be willing to help.
      If I were to do it (given my ability with XS) I'd take the local networking path. All you need for the server program is a port to network repeater:
      • a thread reads from the port and writes into some memory buffer (even a perl scalar might do, depends on buffer size); Device-Parallel-Port should probably do what you need (and portably too)
      • another thread answers UDP requests with chunks taken from the shared buffer; regular sockets are all you need
      It could even be done in a single thread, given that both processes should complete pretty fast.
      Hope that's enough to get you started,
        I think adding Win98 support to that is indeed a lot of dirty work and I don't know if it's worth the effort. Currently I'm looking at two possibilities: local networking and creating an ActiveX control (using PerlCtrl) that emulates OLE events.
        by the way: the author of Device::ParallelPort asked me how to get Win32 support for his module and got my code, based upon jcwren's code... :)

        Jouke Visser, Perl 'Adept'
        Using Perl to help the disabled: pVoice and pStory
      Cache::FileCache is probably what you're looking for.


        Cache::FileCache is too slow. The benchmark of Win32::MMF shows that the MMF approach is about 700 times faster than the filecache approach. :-)

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (3)
As of 2019-08-19 21:00 GMT
Find Nodes?
    Voting Booth?
    If you were the first to set foot on the Moon, what would be your epigram?

    Results (141 votes). Check out past polls.