linux – gtk_main()和unix套接字
发布时间:2020-12-14 01:22:13 所属栏目:Linux 来源:网络整理
导读:我正在使用C和unix低级套接字处理聊天应用程序.我已经成功制作了控制台版本,但我想为应用程序制作一个GUI. 我想将GTK用于GUI. 我的问题是如何“同步”套接字和GUI. 因为我必须调用gtk_main()作为最后一个GTK语句,并且应用程序本身是一个无限循环.当消息进入
我正在使用C和unix低级套接字处理聊天应用程序.我已经成功制作了控制台版本,但我想为应用程序制作一个GUI.
我想将GTK用于GUI. 我的问题是如何“同步”套接字和GUI. 因为我必须调用gtk_main()作为最后一个GTK语句,并且应用程序本身是一个无限循环.当消息进入时如何更新GUI? 解决方法
您遇到的问题是您同时拥有多个事件系统但只有一个线程. Gtk带有自己的事件处理程序,最终归结为select(),它将在任何用户输入或其他gtk事件上唤醒.您自己希望使用自己的事件处理来处理网络,事件处理通常由套接字上的select()或阻塞模式下的套接字组成.
一种解决方案是将您的事件集成到Gtk的事件循环中. 你可以让Gtk监视/选择()你的套接字并在状态改变时调用特定的函数(数据可读). 另一种解决方案是使用Gtk网络功能. 通常,您不希望对套接字执行如此特殊的操作,因为它不容易使用Glib IO通道进行包装.见http://developer.gnome.org/glib/2.30/glib-IO-Channels.html 第三种解决方案是启动处理网络的第二个线程,例如使用posix线程或Gtk线程功能. 将GUI与应用程序的工作者部分分开通常是一个好主意.但是对于聊天应用程序,它可能不会比其他解决方案带来任何好处.见http://developer.gnome.org/glib/2.30/glib-Threads.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |