以非阻塞方式和chunk-by-chunk处理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相关的开发人员)都将受到赞赏。
答案 0 :(得分:1)
收到g_input_stream_read_async回调后,我想继续读取字节。所以,第一个想法是从回调处理程序递归调用g_input_stream_read_async,将其自身作为下一个回调传递。
这是有效且运作良好。