0

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

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

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

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

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

4

1 回答 1

1

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

这是有效的并且运作良好。

于 2016-08-28T21:54:50.630 回答