2017-02-22 49 views
0

我想写一个GSource的子类来处理串口事件。我发现这样做的方式是使用POSIX终端接口,该工作使用文件描述符。出于任何原因,GLib的主事件循环有一个特殊的方法来处理这个变量。如何在创建自定义gsource时使用串行引脚?

作为official documentation says,有两个GSource抽象函数用于准备分派,一个在fds池之前运行,另一个在一个之后运行。这表明,让GLib处理文件描述符可能非常重要,而不是在我自己的准备功能中实现这一点,但there is no condition(如“引脚状态已更改”)可用于串行端口引脚。关于这个我有一些问题。

  1. 为什么GLib团队选择让库处理文件描述符?

  2. 我可以得到一些问题,如果我忽略它,并在我自己的准备功能中实现这一点?

回答

0
  1. GSource需要处理的文件描述符,因为它需要能够将它传递给poll()的低级别事件轮询。
  2. 你的问题不清楚。忽略什么?实施什么?

我怀疑你应该能够使用g_unix_fd_source_new()创建的GUnixFDSource来观察终端FD上的输入。在其回调(g_source_set_callback())中,您应该能够使用普通的终端I/O功能从FD中读取数据。 GSource实际上就是将FD集成到全局事件循环(GMainContext)中。

相关问题