【问题标题】:How to use Gnome GIO to read a file by chunks in non-blocking way?如何使用 Gnome GIO 以非阻塞方式逐块读取文件?
【发布时间】:2016-08-27 18:50:42
【问题描述】:

以非阻塞方式和逐块处理 GInputStream 的正确(GIO/Glib/GTK/Gnome)方式是什么?

我有一个应用程序正在下载(通过 libsoup)并分块处理数据流并并行执行其他操作。我在 GInputStream 上调用 g_input_stream_read_async(从 soup_session_send_finish 接收并给它一个合理大小的块来读取(在我的情况下为 2048 字节)。

收到g_input_stream_read_async 回调后,我想继续读取字节。因此,第一个想法是从回调处理程序中递归调用g_input_stream_read_async,将自身作为下一个回调传递。但这对我来说似乎很笨拙而且不太正确(而且我不确定将当前仍在执行的回调传递给 GIO 是否安全)。

替代方案可能是分离一个线程并在调用g_input_stream_read 的循环中执行通常的阻塞读取。

但是在 GTK / Gnome 世界中通常是如何完成的呢?什么是正确的方法?任何简单的工作示例(最好来自与 GTK / Gnome 相关的开发人员)将不胜感激。

【问题讨论】:

    标签: c asynchronous chunks gio


    【解决方案1】:

    收到 g_input_stream_read_async 回调后,我想继续读取字节。因此,第一个想法是从回调处理程序中递归调用 g_input_stream_read_async,将自身作为下一个回调传递。

    这是有效的,效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多