読み取り可能なファイル イベントは、チャネルが読み取り可能になることによってトリガーされますか?それとも、チャネルが読み取り可能になることによってトリガーされますか? ファイル イベント ハンドラーでは、将来トリガーされる新しいイベントを取得するために、利用可能なすべての入力を読み取る必要がありますか? または、1 文字だけを読み取って戻ることはできますか?さらに入力があった場合、ハンドラーは自動的に直接再度呼び出されますか? または、直接ではなく、むしろイベント キューの最後に配置することで、1 つのストリームがプログラム全体をブロックするのを防ぐために、(1 文字だけでなく、たとえば 1 行で) これを行うのが好ましい方法でしょうか?
1 に答える
3
これは、読み取り可能なチャネルによってトリガーされるため、入力の一部のみを読み取ることができます (または、ハンドラーが再度呼び出されることを確認して、何も読み取らない場合もあります)。ただし、利用可能なすべての入力を読み取ると、パフォーマンスが向上します (必ずしもすべての利用可能なバイトではありません: 行ごとに読み取る場合は、fblocked 状態gets
に戻るまで行います)。-1
入力が使い果たされる兆候は の真の値です[fblocked $channel]
。そのため、gets
不完全な入力行の使用例が可能です: チャネルが技術的に読み取り可能であるにもかかわらず、 getableではなく、新しいデータが到着するまでイベントは再び発生しません。
于 2013-01-28T13:48:57.613 に答える