问题标签 [runloop]

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 回答
333 浏览

swift - Swift 3,制作计时器,添加到字典,永不熄灭

我有ThingThingManager

如果暂时没有人提到某个特定Thing的东西,我想ThingManager忘记它。

我已经尝试过基于块的计时器和基于 RunLoop 的计时器。他们似乎从来没有“走开”

更新,基于块的版本:https ://gist.github.com/lacyrhoades/f917b971e97fdecf9607669501ef6512

0 投票
1 回答
1397 浏览

swift - RunLoopObserver 和 RunLoopActivity

在下面显示的代码中,我创建了一个线程,它创建 0 到 15 之间的随机数,并在它出现 3 时停止,更改结束参数。在我向主线程的运行循环中添加了一个运行循环观察者(即“观察”结束参数)之后。如您所见,运行循环观察者和我的线程在打印前都休眠了 1 秒,所以我希望在控制台中,观察者的打印和我的线程的打印是交替的。事实并非如此。我相信,如果我理解它,它将取决于CFrunloopActivity参数及其可能的组合。

谁能解释一下这个参数的操作?如果是,是否有交替打印的组合?如果你不能有交替打印,观察者如何在主线程的运行循环中工作?

谢谢

这是代码:

0 投票
1 回答
2823 浏览

macos - 简单的 HID OSX 应用程序

我开始为 HID 设备编码。我开始阅读 Apple 文档和示例代码。提供的代码非常过时,甚至无法在 Xcode8 中打开。

从 Apple 下载示例代码

我需要帮助来寻找开始使用 HID 服务的示例项目/片段!打开一个句柄,读取和写入设备报告,在运行循环中监听设备生成的报告。

0 投票
5 回答
6436 浏览

ios - 如何简单地等待 iOS 中的任何布局?

在开始之前请注意,这与后台处理无关。没有涉及背景的“计算”。

只有 UIKit

假设在 6s iPhone 上

UIKit 的每一个都需要一秒钟的时间来构建。

这将发生:

一大步

它们同时出现。重复一遍,在 UIKit 做大量工作时,屏幕只是挂起 3 秒。然后它们都同时出现。

但是,假设我希望这种情况发生:

在此处输入图像描述

它们逐渐出现。当 UIKit 构建一个屏幕时,屏幕只会挂起 1 秒。它出现。它在构建下一个时再次挂起。它出现。等等。

(注意“一秒”只是一个简单的例子,为了清楚起见。见这篇文章的结尾更完整的例子。)

你如何在iOS中做到这一点?

您可以尝试以下方法。它似乎不起作用

你可以试试这个:

  • 请注意,如果值太小 -这种方法很简单,而且很明显,什么都不做。UIKit 将继续工作。(它还能做什么?)。如果值太大,那是没有意义的。

  • 请注意,当前(iOS10),如果我没记错的话:如果您尝试使用零延迟技巧来尝试这个技巧,它充其量只能正常工作。(如你所料。)

跳闸运行循环...

合理的。 但我们最近的现实生活测试表明,这似乎在很多情况下都行不通。

(即,Apple 的 UIKit 现在已经足够成熟,可以将 UIKit 的工作抹去超出那个“技巧”。)

思考:在 UIKit 中,有没有一种方法可以在它基本上绘制完你堆积的所有视图时获得回调?还有其他解决方案吗?

一种解决方案似乎是 .. 将子视图放在控制器中,这样你就会得到一个“didAppear”回调,并跟踪它们。 这看起来很幼稚,但也许这是唯一的模式?无论如何它真的有用吗?(只有一个问题:我看不到任何保证 didAppear 确保所有子视图都已绘制。)


万一这还不清楚...

日常用例示例:

• 假设可能有七个部分

• 假设每个 UIKit 通常需要0.01 到 0.20来构建(取决于您显示的信息)。

• 如果你只是“让整个事情一气呵成”,通常是可以接受的(总时间,比如 0.05 到 0.15)......但是......

• 当“新屏幕出现”时,用户通常会有一个乏味的停顿。(0.1 到 0.5 或更差)。

• 如果您按照我的要求进行操作,它将始终平滑地显示在屏幕上,一次一个块,每个块的时间最短。

0 投票
2 回答
187 浏览

ios - 主队列中没有异步?

我们知道 main_queue 是一个串行队列。没有真正的异步。</p>

“方法调用”上面的代码将写在“main_async调用”之前。因为在main_queue中没有真正的异步。但下面的代码可能会说不:

“方法调用”上面的代码将在“main_async 调用”之后编写,我认为这是因为“RunLoop”。有没有人可以解释这是为什么?

0 投票
1 回答
350 浏览

ios - performSegue - 它会停止进一步的代码执行吗?

调用 performSegue 是否应该停止进一步的代码执行并将执行传递给目标?

我有这个简单的调用: performSegue(withIdentifier: "showTweets", sender: self) 但似乎该行之后的以下代码仍在执行......这正常吗?

0 投票
1 回答
112 浏览

ios - 为什么要在动画语句后面加上runUntilDate?

像上面这么多代码,这是为什么呢?如果我评论 runUntilDate 行会发生什么?

更新:如果我在最后一行添加下一行(NSLog),直到动画完成才会执行。看起来 runUntilDate 阻塞了主线程,那么为什么我们需要在这里阻塞线程呢?

0 投票
1 回答
253 浏览

macos - CFRunLoopRunInMode 使用递归冻结主窗口

对于一个有很多遗留代码的跨平台项目,我的 Cocoa 应用程序只使用一个带有自定义 NSView 的 NSWindow,它捕获所有鼠标事件并绘制我的所有应用程序图形细节。

我需要实现本地模式行为,所以我在主线程中使用:

CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.01, false);

在语言环境循环内。该函数在 0.01 秒后按预期返回,值为 kCFRunLoopRunTimedOut。但是,在此期间自定义 NSView 不再接收鼠标事件,因此我的应用程序看起来像是被冻结了(颜色鼠标光标转来转去)。

定时器事件仍会到达自定义 NSView,但不会到达鼠标事件。

Apple 指定可以递归调用此函数。还有什么我应该做的,以便 NSView 仍然接收用户鼠标输入吗?

0 投票
1 回答
42 浏览

java - Java:无法退出自定义 RunLoop 实现

我正在尝试创建一个自定义运行循环,它基本上以 FIFO 顺序运行任务并提供三个 API addTask(Task task)run()exit()

任务界面

任务运行循环

任务 0 - 9 可以成功运行,但exit()调用不会终止运行循环。我猜该run()方法中的while循环无限运行,我想知道如何退出那个while循环。谢谢!

0 投票
0 回答
151 浏览

asynchronous - 为实时事件调度创建自定义运行循环

我开始研究 Swift 和 Mac OS 的异步代码。我想在我的应用程序中添加一个音序器,所以我需要一个非常类似于 SpriteKit 的游戏循环运行的循环,没有视觉库。

我想做的是一个虚拟时间线,我可以运行、暂停、停止并使用它来安排发送网络消息的操作。我需要尽可能准确,可能在高优先级线程上运行或使用高优先级计时器。

只要我能在与 GUI 不同的线程上运行一个高精度的运行循环,我就可以很好地构建其余部分。我只是在寻找在 Swift 中实现这一目标的最佳方法。任何图书馆可以做到这一点,所以我不必做基本的管道?

谢谢!

编辑: 即使应用程序在后台运行,这个循环也必须运行。

计划是最终将它用作 OSC 音序器来控制采样准确的音频引擎(现在我可以在大约 4 秒内获得大约 14000 条 OSC 消息,而且它会变得更大)。它将随着时间的推移处理 teigger 的时间和动作处理参数(该循环中不涉及音频,至少不直接涉及),并可能生成/同步到 SMPTE 时间码以与视频和音频播放服务器同步。重要的是,时间保持尽可能精确,因为它可以(将)在现场活动中使用。

那么使用高精度计时器来保证准确性?还是运行 GCD 线程?我还没有接触过 OS X 中的异步编码,所以我只想从正确的方向开始。