以非阻塞方式和逐块处理 GInputStream 的正确(GIO/Glib/GTK/Gnome)方法是什么?
我有一个应用程序正在下载(通过 libsoup)并分块处理数据流并并行执行其他操作。我正在调用g_input_stream_read_async
GInputStream (从接收soup_session_send_finish
并给它一个合理大小的块来读取(在我的情况下为 2048 字节)。
收到g_input_stream_read_async
回调后,我想继续读取字节。因此,第一个想法是g_input_stream_read_async
从回调处理程序递归调用,将自身作为下一个回调传递。但这对我来说似乎很笨拙而且不太正确(而且我不确定将当前仍在执行的回调传递给 GIO 是否安全)。
替代方法可能是分离一个线程并在循环调用中执行通常的阻塞读取g_input_stream_read
。
但是在 GTK / Gnome 世界中通常是如何完成的呢?什么是正确的方法?任何简单的工作示例(最好来自与 GTK / Gnome 相关的开发人员)将不胜感激。