2016-08-27 5 views
0

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に関連した開発者が望ましい)があれば幸いです。

答えて

1

私はg_input_stream_read_asyncコールバックを受け取った後、バイトを読み込み続けます。したがって、最初のアイデアは、コールバックハンドラからg_input_stream_read_asyncを再帰的に呼び出し、次のコールバックとしてそれ自身を渡すことです。

これは有効であり、うまくいきます。

関連する問題