您遇到的问题是您同时拥有多个事件系统但只有一个线程.Gtk +带有自己的事件处理程序,最终归结为一个select()将唤醒任何用户输入或其他gtk事件.您自己希望使用自己的事件处理来处理网络,事件处理通常包括select()套接字或在阻塞模式下使用套接字.
你可以制作Gtk + watch/select()你的套接字,并在状态发生变化时调用特定的函数(数据可读).请参阅http://developer.gnome.org/glib/2.30/glib-The-Main-Event-Loop.html上的"创建新的源类型"部分.
通常,您不希望对套接字执行如此特殊的操作,因为它不容易使用Glib IO通道进行包装.请参阅http://developer.gnome.org/glib/2.30/glib-IO-Channels.html
将GUI与应用程序的工作者部分分开通常是一个好主意.但是对于聊天应用程序,它可能不会比其他解决方案带来任何好处.请参阅http://developer.gnome.org/glib/2.30/glib-Threads.html
| 归档时间: |
|
| 查看次数: |
2833 次 |
| 最近记录: |