On Sun, 22 Jan 2017 11:05:41 -1000 (HST) rbd <r...@soest.hawaii.edu> wrote: > Hi all, > > I need to monitor a Unix file descriptor for input within my gtk3 > program. I believe that I need to somehow be using > g_source_add_unix_fd() and friends but am finding the documentation > confusing. Are there any simple examples which show how to do this > anywhere? (I looked but could not find, apologies for any oversight > on my part.) > > I am porting an old Motif app which used > > XtAppAddInput( ... fd ... callbackproc ...) > > to register an input handler callbackproc() to be called whenever > there was input pending on fd. Whatever I use to replace this should > NOT block for any user-perceivable amount of time when checking fd > for pending input, which will typically be very small (under 80 > bytes) and occurring between a few times per second and a few times > per hour. > > Absent a working understanding of how to use g_source_add_unix_fd(), > etc., my inclination is to just use g_idle_add_full() and do my own > non-blocking select() inside my callback. Seems like > g_source_add_unix_fd() is perhaps better suited to this task, but I > can't figure out what I need to do vs. what glib can do without me, > i.e., do I really need to create and attach my own GSource and code > my own entire set of GSourceFuncs? That would seem to be a hugely > complicated effort compared to the simple XtAppAddInput() call, or > even to coding my own select() stuff inside a g_idle_add_full() > callback. Monitoring a few stray file descriptors within a gtk3 > program would seem to be a not-unusual need, so I am hoping someone > will tell me that there is an existing GSource somewhere that I can > just add my own fd into, but that is not at all obvious from the > documentation.
I do not fully understand your question (especially I don't understand your reference to using "g_idle_add_full() and do my own non-blocking select() inside my callback", which would not work), but you can either use glib's g_poll()/g_source_add_poll() implementation or (on unix) its g_source_add_unix_fd() implementation to watch on a file descriptor. The functionality of both is equivalent, and on unix both use poll() underneath. This may (or may not) help: https://sourceforge.net/p/cxx-gtk-utils/git/ci/master/tree/c++-gtk-utils/io_watch.cpp If you want to use glib's g_source_add_poll() implementation rather than its g_source_add_unix_fd() implementation, you can avoid some of the boiler plate with g_io_add_watch() - you can use this to call up a callback function whenever a file descriptor is ready (you don't need to use the GIOChannel object for any other purpose, such as reading from or writing to the descriptor): https://developer.gnome.org/glib/stable/glib-IO-Channels.html#g-io-add-watch Chris _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list