Re: Query about handling OS signals



On Thu, Apr 10, 2008 at 09:12:21AM +0100, John M Collins wrote:
I have spent most of a day looking at the various documents about
emitting signals and articles here without finding the answers to the
questions - sorry if they seem stupid as I'm a comparative newcomer to
GTK.

I am converting an application to use GTK+ which receives messages from
a daemon process using signals - i.e. OS signals not the signals in GTK.

The signals are sent by the daemon process to tell the receiving clients
"you might want to refresh your display". It is for the receiving
clients to worry about whether they do need to refresh their displays
(the actual data is in shared memory).

My first question is: Is it safe to emit a signal (i.e. the GTK idea of
a signal) within the OS-signal handling routine?

No. You should get rid of the OS-signal handling mechanism. Use a
file descriptor, a socket (UDP) or something, register a callback to
this and update in the ordinary mannor. Signals is a nucience. You
should keep syctronication on file descriptor.

The daemon process then send a UDP (Multicast) message to the clients.

If you want I can give you an example.

If not, it looks as if the only standard way is to have the OS
signal-catching routine just turn on "had_a_signal" and use
g_timeout_add to call a function which looks at "had_a_signal". Or is
there a better way?

If it is OK to emit a signal please could someone confirm my
understanding of "events" in GTK. (I'd appreciate it if someone could
confirm my understanding in any case).

Am I right in thinking that if I want to emit a client event (which
seems to be an appropriate thing to emit) I can either put:

        g_signal_emit_by_name(G_OBJECT(window), "client_event");

Or I set up a GdkEvent and put

        g_signal_emit_by_name(G_OBJECT(window), "event", &event,
        &retval);

Unfortunately the documentation such as there is talks about using
gtk_signal_emit_by_name but the documentation of that says it's
deprecated and I should use g_signal_emit_by_name.

Or is there is some altogether better way of doing all this that I
haven't thought of? Please note rewriting the daemon process is not
currently an option.

You should! It is a small difference.

And WERY worthwhile.
 

John Collins <jmc xisl com> Skype: toadwarbler
Xi Software Ltd www.xisl.com 

Tel: +44 (0)1707 886110 (Direct)
     +44 (0)7799 113162 (Mobile)

Registered in England & Wales Company Number 1977148 VAT: GB 403 9239 64

Trading Address: 3 Mandeville Rise, Welwyn Garden City, Herts, AL8 7JT, UK
Reg Office: 2 Mill Road, Haverhill, Suffolk, CB9 8BD, UK

_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

-- 
Göran Hasse

----------------------------------------------------------------
Göran Hasse           email: gorhas raditex se  Tel: 08-6949270
Raditex AB             http://www.raditex.se    
Planiavägen 15, 1tr                             Mob: 070-5530148
131 34  NACKA, SWEDEN                         OrgNr: 556240-0589
VAT: SE556240058901
------------------------------------------------------------------




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]