【发布时间】: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