场景:
我用C语言为Linux编写了一个CLI后门和一个CLI控制器。我正在使用Glade和GTK+3为控制器创建一个图形用户界面。我希望控制器(基本上是一个具有反向功能的服务器)始终接受来自后门(具有反向功能的客户端)的连接。同时,我希望将控制器中TextBuffer小部件上编写的命令发送到后门,并将接收到的输出写回后门。
问题1:我应该为此使用线程吗?问题2:如果不是,那么这个问题的最佳解决方案是什么?问题3:我应该使用GDK线程吗?你有什么可以推荐的教程吗?
万分感谢!
发布于 2020-06-23 05:16:28
问题1:不需要,您不一定需要线程;尽管根据用例它们可能是有意义的。它们可能会阻止阻止你的UI,或者让你的代码变得过于复杂。还要注意,GTK本身是单线程的。
问题2:基本上,您希望确保您的代码并发运行,但这并不一定意味着并行化,除非您的部分代码将花费一段时间,从而阻塞主线程。GLib是GTK (和许多其他项目)的基库,它提供了一个事件循环,可用于调用和实现异步操作,无论这些操作是否运行在不同的线程中。只要它们通知主线程,就可以在主循环中添加事件。
问题3:根据您的用例到底需要什么,有几个选项:
GIOStream,GInputStream和GOutputStream分别帮助输入/输出。对于异步方法,可以使用GIOChannel后缀,像g_input_stream_read_async().GSource,它允许你将事件集成到GLib事件循环中
https://stackoverflow.com/questions/62519246
复制相似问题