我在OSX的可可应用程序中有以下代码:

void *callbackInfo = NULL; // could put stream-specific data here.
            FSEventStreamRef stream;
            CFAbsoluteTime latency = 1.0; /* Latency in seconds */

            /* Create the stream, passing in a callback */
            stream = FSEventStreamCreate(NULL,
                                         &mycallback,
                                         callbackInfo,
                                         pathsToWatch,
                                         kFSEventStreamEventIdSinceNow, /* Or a previous event ID */
                                         latency,
                                         kFSEventStreamCreateFlagFileEvents//kFSEventStreamCreateFlagNone /* Flags explained in reference */
                                         );

            /* Create the stream before calling this. */
            FSEventStreamScheduleWithRunLoop(stream, CFRunLoopGetCurrent(),kCFRunLoopDefaultMode);
            FSEventStreamStart(stream);



            CFRunLoopRun();

        }


此代码会收到有关文件系统更改的通知,并会做出相应的反应(代码段中没有回调函数)。

我现在的问题是CFRunLoopRun()正在阻塞。即代码的进一步执行停止。但是,我正在寻找一种可能可以开始观察文件系统更改但又可以再次停止它(例如从另一个对象开始)的可能性。

我想到的一个选择是仅启动循环一秒钟,然后再检查全局变量。但是,我通常不喜欢全局变量。

这里有人有一个很好的方便的主意,如何解决?购买开销并将执行放入单独的线程中是个好主意吗?

提前致谢!
诺伯特

最佳答案

可可应用程序具有隐式运行循环,因此只需删除CFRunLoopRun();

考虑通过大中央调度(GCD)使用调度队列,而不是在运行循环中调度流

关于objective-c - 需要CFRunLoopRun()但希望它解除阻止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31765386/

10-08 22:34