gpt4 book ai didi

c - 如何使用 Gnome GIO 以非阻塞方式分块读取文件?

转载 作者:行者123 更新时间:2023-11-30 15:06:19 26 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

After I receive a g_input_stream_read_async callback, I want to continue reading bytes. So, the first idea is to recursively call g_input_stream_read_async from the callback handler, passing itself as next callback.

这是有效的并且效果很好。

关于c - 如何使用 Gnome GIO 以非阻塞方式分块读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39184621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com