如何将POSIX文件描述符添加到iOS运行循环中,以便它指示何时可以读取数据



我在iOS程序中有一个管道,我希望主运行循环(或任何其他运行循环)让我知道何时有数据要读取…

那么我如何将管道的文件描述符添加到运行循环中?

(我很确定在引子下的应用程序必须运行select/kqueue/poll/任何接收它的事件,所以它应该只是得到FD调用的问题,但我找不到正确的API调用是什么相关信息。)

请参阅Apple文档中的创建和使用调度I/O通道一节,了解如何使用GCD完成此操作,这大致是相同的事情。简而言之,您需要创建一个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

最新更新