问题标签 [cfrunloop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3806 浏览

c++ - 从另一个线程调用 CFRunLoopStop 是否安全?

我的(主要是 POSIX)应用程序的 Mac 版本生成了一个子线程,该线程调用 CFRunLoopRun() 来执行事件循环(从 MacOS 获取网络配置更改事件)。

到了收拾东西离开的时候,主线程在子线程的run-loop上调用CFRunLoopStop(),此时CFRunLoopRun()在子线程中返回,子线程退出,主线程(即阻塞等待子线程退出)可以继续。

这似乎可行,但我的问题是:这是一种安全/推荐的方法吗?特别是,从另一个线程调用 CFRunLoopStop() 是否容易导致竞争条件?据我所知,Apple 的文档对此主题保持沉默。

如果从主线程调用 CFRunLoopStop() 不是解决方案,那么什么是好的解决方案?我知道我可以让子线程调用 CFRunLoopRunInMode() 并经常唤醒以检查布尔值或其他内容,但如果可以避免的话,我不希望子线程进行任何轮询。

0 投票
2 回答
1101 浏览

iphone - NSTimer 没有 UIApplication 就不能工作?

我有一个不以任何方式依赖 UIKit 的自定义 iPhone 应用程序(它没有链接到 UIKit)。这意味着我没有使用UIApplication,因此没有调用UIApplicationMain

问题是当我创建一个计时器时它永远不会触发。计时器是这样创建的:

我怀疑问题可能与运行循环有关,因为在“ main() ”中完成基本初始化后,我这样做:

我对 UIKit 进行了逆向工程,并注意到 UIApplication 做了更多的事情,比如注册系统事件等。NSTimer可能依赖于其中的一件事情。我注意到的另一件事是,在 UIApplication 的委托中,线程与 main() 中的线程相同。

如何让NSTimer正常工作?如果它与运行循环相关,有人可以指出错误吗?“ CFRunLoopRun() ”用于挂起主线程,以便应用程序的其余部分可以运行。我不认为这是正确的。

编辑:我认为需要配置运行循环。不知何故 ...

0 投票
1 回答
1496 浏览

iphone - 循环一个 CFRunLoopSource

这是我目前正在开发的源文件。这个类背后的想法是包含一个目标对象和选择器,它将在传递给 scheduleInCFRunLoop的任何CFRunLoop中调用。我需要这个重复循环而不消耗 iPhone 上的所有可用处理时间。任何关于完成的帮助都是最有帮助的,我花了一整天的时间在网上冲浪,试图找到有关自定义 CFRunLoop 源的有用信息,但我还没有找到任何对完成这门课程有用的东西。

RunLoopContext.h

RunLoopContext.m

0 投票
1 回答
702 浏览

iphone - 如何在 iPhone 的自定义 CFRunLoop 中调用录音回调

我正在 iPhone 中录制音频..

这是我的音频队列对象

但我想在单独的 RunLoop 中运行它。如何创建自定义 CFRunLoop ?请帮助我..提前谢谢。

0 投票
1 回答
668 浏览

objective-c - 如何在不冻结 GUI 的情况下让 AudioQueue 播放?

我刚开始从 CoreAudio 书(粗略)中了解 AudioQueues。我做了AudioQueue播放示例教程,和apple教程示例基本一样。一切正常。

当我尝试在带有 GUI 的应用程序中实现代码时,问题就开始了。我通过将代码粘贴到 NSObject 子类的“init”方法中对其进行了测试。我可以让队列执行回调的唯一方法是在我的初始化末尾插入一个空的 DO...WHILE 循环,但这会使 GUI 冻结(显然......)!

显然,只要 AudioQueueNewOutput 为 inCallbackRunLoop 和 CallbackRunLoopMode 参数传递 NULL,AudioQueue 就应该自动在其自己的单独线程中运行。那只是没有发生。我只听到缓冲区启动后的 1.5 秒。

显然,关于事情的运作方式,我不明白一些基本的东西......

卡斯帕

0 投票
6 回答
2057 浏览

ios - iPhone 崩溃、ASIHTTPRequest 或 NSURL 相关

鉴于以下符号化的崩溃日志,是否更有可能由于线程 5 上的 ASIHTTPRequest 或线程 3 上的 NSURLConnection 而发生崩溃?我问是因为这个问题有类似的问题:ASIHTTPRequest, EXC_BAD_ACCESS when request done done

然而,他们有更多关于 ASIHTTPREquest 崩溃的信息,它在线程 3 上,而我的 NSURLConnection 在线程 3 上,信息比另一个多。

0 投票
2 回答
454 浏览

iphone - 如何在后台加载数据时使用 UI 事件

我有一个从 Web 服务加载数据的小 iPhone 应用程序。为了确保在加载数据时不会出错,我在应用程序上创建了一个半透明视图,并使用 CFRunloopRun() 等待所有数据在后台加载。这是代码:

这工作正常,除了在加载后播放某个按钮的任何点击,因此如果用户点击下载按钮两次,他也会下载两次。

知道如何在屏蔽被移除之前使用 UI 事件。

谢谢 - 安迪

0 投票
1 回答
1195 浏览

objective-c - CFRunLoopRun() 和 NSTimer -> 分段错误

提前感谢任何帮助我的人。

我有一个简单的守护进程。我分配了一个班级,然后开始一个计划和重复的 NSTimer:

然后我调用 CFRunLoopRun() 以便我的守护进程保持活动状态。

现在的问题是,在计时器触发后,我得到了一个段错误。BT:

其他启动计时器的方法也不起作用。例如:

有人知道(wr)on(g)发生了什么吗?

0 投票
2 回答
1516 浏览

iphone - NSTimer setFireDate

从另一个线程调用 setFireDate: 是否被认为是线程安全的,而不是调度定时器的线程?我的意思是,我在一个新线程中分离了这个函数:

[timer setFireDate:]可以从主线程调用吗?我在文档中没有发现任何禁止它的东西......

0 投票
1 回答
1749 浏览

iphone - 关于 CFNetwork、CFReadStreamOpen 和 CFRunLoopRun 的困惑

当你意识到自己不知道发生了什么时,那种下沉的感觉……

我在我的网络代码中使用这个代码已经快两年了,没有任何问题。

我相信它最初是基于这里给出的代码示例:

http://developer.apple.com/library/mac/#documentation/Networking/Conceptual/CFNetwork/CFStreamTasks/CFStreamTasks.html

然而,我最近注意到一些连接失败了,因为 CFReadStreamOpen 返回 false 但错误代码为 0。再盯着上面的链接后,我注意到 CFRunLoopRun() 语句,并添加了它:

这解决了连接问题。但是,我的应用开始出现随机问题——界面有时没有响应,或者没有绘图,文本字段不可编辑,诸如此类。

我已经阅读了 CFReadStreamOpen 和运行循环(具体来说,主运行循环自己运行,除非我在辅助线程中自己设置它,否则我不应该运行运行循环 - 我不是,我所知道的)。但我仍然对上面实际发生的事情感到困惑。具体来说:

1) 为什么 CFReadStreamOpen 有时会返回 FALSE 和错误代码 0?这实际上是什么意思?

2) CFRunLoopRun 调用在上述代码中实际上做了什么?为什么示例代码会进行该调用 - 如果此代码在主线程中运行,我不应该运行运行循环?