On Tue, 11 Sep 2007 11:29:38 -0300
Luiz Americo Pereira Camara <[EMAIL PROTECTED]> wrote:

> Luca Olivetti wrote:
> > En/na Mattias Gärtner ha escrit:
> >> Is there already a cross platform component for applications to
> >> check if it is
> >> already running and if yes then pass some commands to the already 
> >> application?
> >>
> >> For example clicking on files in the file browser should not open
> >> a second
> >> instance, but tell the already running instance to open the files.
> >
> > There's uniqueinstance
> > http://sourceforge.net/project/shownotes.php?group_id=92177&release_id=471823
> >  
> >
> > (The wiki is down, so I cannot give you the wiki link) *but* it 
> > doesn't work here under Linux (I could launch more that one
> > instance of my program).
> > Since I hadn't too much time to debug it, I slightly modified it to 
> > open and lock a file instead of using TSimpleIpc, but that makes it 
> > non-crossplatform.
> > Since it's short I'm including it here, it could be extended to
> > write the pid in the file, so another instance can somewhat contact
> > the first one.
> 
> It's working here both under win32 and linux (testraw and
> testcomponent programs). Using fpc 220, Ubuntu Feisty Faw, recent
> lazarus svn.
> 
> The only missing feature under linux is the parameter list passing:
> Under windows the SimpleIpc mechanism is integrated with the win32 
> message loop so the IPCServer.OnMessage is called without any further 
> intervention.
> Under unix, SimpleIpc is not integrated with any message loop so 
> IPCServer.OnMessage is not called.
> There are to ways of doing under unix:
>   - Hook in the LCL message loop to call PeakMessage
>   - Create a thread that will call PeakMessage at a time interval
> 
> In the below address you will find an updated component that hooks in 
> Application.OnIdle to call PeakMessage. Its far from optimal because 
> will prevent the use of OnIdle by the programmer and the parameter
> list will be peaked only when the app is idle/has focus.

Then use Application.AddOnIdleHandler instead.

 
> https://svn.bountysource.com/luipack/trunk/uniqueinstance
> 
> If someone knows a way to hook in LCL message loop to be called more 
> frequently than OnIdle or wants to implement a separeted thread i'm 
> accepting patches.

Contrary to windows there are far less messages under linux/gtk so the
OnIdle is not called for long periods, when you work in another program.
Unless you start a TTimer.


Mattias

_________________________________________________________________
     To unsubscribe: mail [EMAIL PROTECTED] with
                "unsubscribe" as the Subject
   archives at http://www.lazarus.freepascal.org/mailarchives

Reply via email to