gtk_main() and unix sockets

后端 未结 1 767
清酒与你
清酒与你 2021-01-13 17:45

I\'m working on a chat application using C and unix low level sockets. I have succeeded in making the console version, but I want to make a GUI for the application. I would

相关标签:
1条回答
  • 2021-01-13 18:08

    You are facing the problem that you have several event systems at once but only one thread. Gtk+ comes with its own event handler, that eventually boils down to a select() which will wake up on any user input or other gtk event. You yourself want to handle networking with your own event handling, which typically consists of a select() on your socket(s) or using the sockets in blocking mode.

    One solution is to integrate your events into the event loop of Gtk+.

    You can make Gtk+ watch/select() your sockets and call a specific function when their state changes (data readable). See the section "Creating new source types" on http://developer.gnome.org/glib/2.30/glib-The-Main-Event-Loop.html

    Another solution would be to use Gtk+ networking functionality.

    Typically you don't want to do something so special with the sockets that it is not easily wrapable with Glib IO Channels. See http://developer.gnome.org/glib/2.30/glib-IO-Channels.html

    A third solution is to start a second thread that handles your networking, e.g. with posix threads or Gtk+ threading functionality.

    Separating GUI from the worker part of your application is in general a good idea. However for a chat application, it probably does not give any benefit over the other solutions. See http://developer.gnome.org/glib/2.30/glib-Threads.html

    0 讨论(0)
提交回复
热议问题