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 に関連する開発者によるもの) を歓迎します。