0

iOS プログラムにパイプがあり、読み取るデータがあるときにメインの実行ループ (または他の実行ループ) に通知してもらいたい...

では、パイプのファイル記述子をランループに追加するにはどうすればよいでしょうか?

(内部では、アプリがイベントを受け取るために select/kqueue/poll/whatever を実行している必要があると確信しているため、その呼び出しに FD を取得するだけで問題になるはずですが、関連する情報が見つかりません適切な API 呼び出しとは何か)。

4

1 に答える 1

1

GCD を使用してこれを行う方法については、Apple ドキュメントの「ディスパッチ I/O チャネルの作成と使用」セクションを参照してください。これはほぼ同じことです。簡単に言うと、dispatch_io チャネルを作成し、その読み取りをキューに入れます。

dispatch_io_t  channel =  dispatch_io_create(DISPATCH_IO_STREAM,
                                             fd,
                                             dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
                                             ^(int error) {

                                             });

dispatch_io_read(channel,
                 0,
                 1024,
                 dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^(bool done, dispatch_data_t data, int error) {
                     // Code to execute when 1024 bytes become available
                 });

読み取り処理キューの一部として、読み取り要求を再開する必要があります。

または、 を作成し、CFFileDescriptorRefそれを使用して を作成することもできますCFRunLoopSourceRef

于 2014-05-22T22:39:16.760 に答える