GInputStreamをノンブロッキングとチャンクごとに処理する正しい方法(GIO/Glib/GTK/Gnome)は何ですか?Gnome GIOを使用してファイルを非ブロック方式でチャンクで読み取るにはどうすればよいですか?
私はlibsoupを通してダウンロードし、データストリームをチャンクで処理し、他のアクションを並行して実行するアプリケーションを持っています。私はsoup_session_send_finish
から受信GInputStream(上g_input_stream_read_async
を呼び出し、私の場合2048バイト)に(読むためにそれをチャンクの合理的な大きさを与えている。
私はg_input_stream_read_async
コールバックを受け取った後、私はバイトを読み続けたい。だから、最初のコールバックハンドラから再帰的にg_input_stream_read_async
をコールして、次のコールバックとしてそれ自身を渡すことです。しかし、それは私にとっては不思議で、あまり適切ではないようです(現在実行中のコールバックをGIOに渡すのが安全かどうかはわかりません)。
代替スレッドをスピンオフし、通常のブロッキングがg_input_stream_read
を呼び出すループで読み込みを行うにある可能性があります。
しかし、それは通常どのようにGTK/Gnomeの世界で行われますか?正しい方法は何ですか?簡単な作業例(GTK/Gnomeに関連した開発者が望ましい)があれば幸いです。