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 に答える