问题标签 [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 投票
3 回答
3579 浏览

ios - 为什么在音频队列播放代码中调用 CFRunLoopRunInMode()?

我正在关注 iOS“音频队列编程指南 - 播放音频”。在指南的结尾处,在Start and Run an Audio QueueCFRunLoopRunInMode()步骤中有调用:

关于第 6 行的文档说:“CFRunLoopRunInMode 函数运行包含音频队列线程的运行循环。” 但是,当我的方法返回时,该运行循环是否仍然执行?上面的代码在我的应用程序中按下播放按钮时由主线程执行。

现在我很难理解这些调用CFRunLoopRunInMode()有什么好处,因为它们的缺点是我的播放按钮没有正确更新(它看起来在音频播放的整个过程中都被按下)并且没有正面效果,即,如果我从我的代码中删除 do-while-loop 以及对的调用CFRunLoopRunInMode(),而是直接从此方法返回,音频也可以很好地播放。好吧,这指出了简单地删除这些调用的明显解决方案,因为这不会造成问题。有人能解释一下为什么这段代码包含在 Apple 的官方指南中,关于在 iOS 中使用音频队列进行音频播放吗?

编辑:

我只是看到在 Mac OS X 中,存在与 iOS 上相同的音频队列 API,并且 iOS 指南似乎是Mac OS 指南的复制粘贴副本。这使我怀疑这些对运行循环的调用仅在 Mac OS 中需要,而在 iOS 中不再需要,例如因为否则 Mac OS 应用程序将退出或类似的东西。有人可以验证或排除吗?

0 投票
2 回答
728 浏览

ios - AFHTTPClient 成功和失败块中的 CFRunLoopRunInMode()

我试图用来CFRunLoopRunInMode()避免在[AFHTTPClient getPath:...]完成块中返回。

我的代码如下所示:

我预计输出是:

但相反,我只得到:

CFRunLoopRunInMode()返回kCFRunLoopRunHandledSource,但调度队列从不执行提交的块。如果我在完成块之外运行相同的代码,则输出符合预期。

我无法弄清楚为什么从完成块运行时调度队列没有被处理。

有人可以解释一下为什么会这样吗?

0 投票
1 回答
7471 浏览

cocoa - 停止一个 NSRunLoop

我在一个线程中有一个连接,所以我将它添加到运行循环以获取所有数据:

但我找不到任何方法来阻止它

我怎样才能停止这个循环?

0 投票
1 回答
721 浏览

c++ - 问题正在运行并停止 CFRunLoop

我有一种情况,我需要等到一个块完成,然后才继续使用我的代码,因为我使用 CFRunLooprun 并停止这是如何做的,我将在我的代码中的注释中解释更多内容

0 投票
1 回答
110 浏览

iphone - 应用程序进入后台时如何进行套接字操作?

我们正在开发与会议相关的应用程序,是否可以在应用程序进入后台后通过套接字发送和接收数据包?我已经用谷歌搜索并找到了类似下面的方法......

CFRunLoopRun 在这里做什么。如果它会工作..如何?我不清楚。帮我从这里去哪里...

谢谢。

0 投票
0 回答
53 浏览

macos - 你能“跳到运行循环”吗?

我正在使用 xCode 进入我的第一个主要 OSX 应用程序的生产阶段。它是一个访问 eBay 的电子商务应用程序,通过许多按钮启动各种 api 调用,然后解析并显示结果。它变得相当大,正如您可以想象的那样,对于我的第一个 xCode 应用程序,代码结构并不是最佳的。但它现在正在生产中,我不想冒险进行重大重组。

我的问题是:代码中有几个点,许多方法调用很深,我只想跳回运行循环并等待按下按钮。在这一点上,做所有必要的回报是不切实际的。

有没有“转到”运行循环的方法?

谢谢!

0 投票
0 回答
694 浏览

objective-c - 诊断 Cocoa 应用程序中的运行循环问题(部分冻结的 UI)

我们的应用程序有一个相当标准的布局——一个带有工具栏的主窗口、左侧的源列表和一个选项卡控件。选项卡的内容由开源且非常复杂的第三方组件绘制。它广泛使用线程等。

一些用户可以可靠地重现整个应用程序“冻结”的情况 - 也就是说,主窗口停止重绘。光标不会抢滩,用户仍然可以四处点击,但窗口根本不会更新。

除了开始使用应用程序、打开一个或多个选项卡并在几分钟内出现问题外,没有特定的重现步骤。

他们能够在屏幕顶部打开应用程序菜单。其中一个菜单项 - “检查更新” - 启动模式会话(带有进度指示器的工作表),同时检查后台线程上的更新。

当应用程序处于这种“冻结”状态时,选择“检查更新”似乎会在模式会话期间解冻应用程序。冻结时进行的单击和按钮按下会突然注册为 UI 重绘。

然后,“检查更新”完成,模式会话结束,应用程序再次冻结。

在我看来,运行循环有问题。这是一个开放式问题,但老实说,我不知道去哪里找——什么会导致这些症状?我看不到遇到此问题的用户的硬件/软件之间有任何关联。

编辑


冻结后,我在控制台上看到的唯一我无法解释的是

但我认为这是一个红鲱鱼。

冻结时的过程示例为 UI 线程显示了这一点:

但我无法解释这些信息......

编辑 2


一个额外的样本;与第一个明显不同:

0 投票
1 回答
645 浏览

c++ - Apple 运行循环的回调方法

如何向 Apple 事件侦听器添加回调方法,例如:

如何将方法或块添加到以下方法,以便当电源更改时我可以记录如下内容(我可以看到它是 C++,但 NSLog 在 Obj-C++ 中仍然有效)类似于:

我想我需要改变:

指向一个指针或什么的?

0 投票
2 回答
6616 浏览

swift - Swift 命令行程序中的 CFRunLoop

我正在使用第三方框架在 Swift 中编写命令行应用程序,该框架(如果我正确理解代码)依赖 GCD 回调来在套接字接收数据时完成某些操作。为了更好地理解框架,我一直在玩一个示例 Cocoa 应用程序,框架的作者编写了一个与框架一起使用的示例。

因为示例应用程序是一个 Cocoa 应用程序,所以运行循环是自动处理的。我包含来自示例应用程序(MIT 许可证)的代码片段,以了解它是如何工作的:

...

...

我想修改示例应用程序以从命令行运行。当我将 startServer() 函数放入命令行应用程序时,它会运行,但套接字在打开后立即关闭,并且程序以退出代码 0 完成执行。这是预期的行为,因为没有运行循环在 Xcode 命令行项目中,因此程序不知道等待套接字接收数据。

我相信让套接字保持打开状态并使程序持续运行的正确方法是将主线程放在 CFRunLoop 中。我查看了 Apple 的文档,除了基本的 API 参考之外,Swift 中没有任何关于线程的内容。我查看了第三方资源,但它们都涉及 iOS 和 Cocoa 应用程序中的备用线程。如何正确实现主线程的 CFRunLoop?

0 投票
1 回答
820 浏览

ios - 应用程序卡住 CPU 使用率高达 100%

我的应用程序卡在CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION. 在我的应用程序中,我调用了一个异步的 C 函数。我在执行过程中显示等待消息。
当这个函数终止时,它调用一个委托来关闭等待的消息并同时显示一个 AlertView。

我使用 gcd 显示警报视图

这是应用程序卡住时调试器 XCode 的屏幕截图。我还看到我的应用程序的 CPU 使用率高达 100%,也许这就是应用程序被系统挂起的原因。

在此处输入图像描述