我正在构建一个GUI(使用C(,它从另一个通过TCP套接字发送数据的应用程序接收要显示的数据。我如何使用GTK(只是我应该采取的方法的一般概述(来做到这一点?我做了很多搜索,发现了关于多线程、GIOchannel等的东西,现在我比以往任何时候都更困惑了。关于如何真正做到这一点,似乎没有任何结论性的文章或指南。
基本上有一条重要规则:
必须从主线程调用所有gtk_*
函数。
如果您从另一个线程更新任何小部件,您可能会得到不一致的结果。
当然,您不希望在该线程中等待TCP数据。
因此,我建议您创建一个单独的线程来进行通信。在这个线程中,你可以等待数据,如果你得到了任何影响你在GUI中显示的东西,你可以告诉主线程做所需的工作。
一个简单的方法是使用g_idle_add()
将回调函数排入队列。然后,这个回调函数在主线程的上下文中执行,可以更新小部件。需要更新的信息可以存储在一些新分配的内存中,这些内存会传递给这个回调,之后您必须在那里释放它。