[fpc-pascal] D-Bus. Non blocking listening for signals

michael.vancanneyt at wisa.be michael.vancanneyt at wisa.be
Thu Jan 13 13:32:29 CET 2011



On Thu, 13 Jan 2011, dibo20 at wp.pl wrote:

> W dniu 10.01.2011 20:41, Michael Van Canneyt pisze:
>> 
>> 
>> On Mon, 10 Jan 2011, dibo20 at wp.pl wrote:
>> 
>>> Sorry for refreshing, but the problem is still present :( . It works 
>>> perfect on my mashine (ubuntu 10.10 64 bit) but doesn't work on my friends 
>>> computer. For example, one of my friend have this same laptop as me and 
>>> exactly this same version of ubuntu (64 bit too). My application find 
>>> signals only when he moving mouse cursor over main form (on idle event is 
>>> fired in which I check for signals too). It looks like method 
>>> dbus_connection_set_wakeup_main_function doesn't register wake up function 
>>> properly. This is procedure, not function so I don't even know if there 
>>> was error.
>> 
>> That can of course be, but this is not under our control.
>> 
>>> I copy source of my program to ubuntu 10.10 32bit on my virtual mashine 
>>> and compile on latest SVN version of lazarus (like on 64 bit ubuntu). This 
>>> same problem. I debug this and wake up function is never called in client 
>>> when dbus host send signals. I have no idea why on 64 bit (and only on my) 
>>> it works ok. Some external library is responsible for this? All computers 
>>> are upgraded to latest version, so we have this same dbus library.
>> 
>> Do they run the same desktop ?
>> 
>> Can you please provide testprograms (client and server) so I can run some 
>> tests ?
>> 
>> Michael.
>> 
>> _______________________________________________
>> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
>> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>> 
> Did you receive my mailwith demo?

Yes, I even debugged some things, but found no solution yet.

> I think I found temporary solution. In 
> glib2 is procedure: g_main_context_set_poll_func(g_main_context_default, 
> @CheckForSignalProc);
>
> It seems that application main loop call registered CheckForSignalProc on 
> each loop cycle without blocking user interface and it works. But I do not 
> know if I understand the documentation:

I'm not sure I understand what you did ?

>
> "Sets the function to use to handle polling of file descriptors. It will be 
> used instead of the |poll()| system call (or GLib's replacement function, 
> which is used where |poll()| isn't available).
>
> This function could possibly be used to integrate the GLib event loop with an 
> external event loop."
>
> "integrate the GLib event loop with an external event loop" - I think this is 
> what I want.
>
> My concerns:
> 1. How does it affect to performance? Is it too often calledfor dbus?
> 2. Glib is most used by GTK. Will this work when I compile project with QT 
> interface for KDE? (my future plans). I do not want to force users to install 
> whole GTK librarys when they areusing only QT

g_main_context_set_poll_func is only used for the GTK widget set. 
You'll have to test separately with Qt.

Michael.



More information about the fpc-pascal mailing list