gpt4 book ai didi

objective-c - 需要 CFRunLoopRun() 但希望它解除阻塞

转载 作者:行者123 更新时间:2023-12-03 17:49:25 30 4
gpt4 key购买 nike

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

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();

}

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

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

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

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

提前致谢!诺伯特

最佳答案

CFRunLoopRun() 永远运行当前的运行循环,直到有人在运行循环中注册调用 CFRunLoopStop()。这不是您想要做的,除非您正在做一些非常奇特的事情。

如果您想要运行FSEventStream回调,您只需将其注册到runloop并保留它,之后您不必对runloop显式执行任何操作,注册偶数流作为来源就是您所要做的。

如果您想停止观察流,请对其调用FSEventStreamStop()

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

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com