![](/img/trans.png)
[英]Server TCP socket only receives data from one network interface linux
[英]How to make a GTK application that receives data from a TCP socket
我正在构建一个 GUI(使用 C),它从另一个通过 TCP 套接字发送数据的应用程序接收要显示的数据。 我如何使用 GTK 执行此操作(只是我应该采用的方法的一般概述)? 我进行了大量搜索并遇到了有关多线程、GIO 通道等的内容。现在我比以往任何时候都更加困惑。 似乎没有关于如何实际实现这一点的任何结论性文章或指南。
基本上有一个重要的规则:
您必须从主线程调用所有gtk_*
函数。
如果您从另一个线程更新任何小部件,您可能会得到不一致的结果。
当然,您不想在该线程中等待 TCP 数据。
因此,我建议您创建一个单独的线程来进行通信。 在这个线程中,您可以等待数据,如果您有任何会影响您在 GUI 中显示的内容,您可以告诉主线程执行所需的工作。
一个简单的方法是使用g_idle_add()
将回调 function 加入队列。回调 function 然后在主线程的上下文中执行,可以更新您的小部件。 需要更新的信息可以存储在传递给此回调的一些新分配的 memory 中,之后您必须在其中释放它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.