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

cocoa - cancelPreviousPerformRequest 与 cancelAllOperations

我现在两个都用,但我不确定哪个更好。到底有什么区别?我知道的模糊问题。为 wwdc 做准备

0 投票
1 回答
471 浏览

sockets - CFWriteStreamScheduleWithRunLoop 有时有效,有时无效?

我正在做异步套接字编程,我的代码大部分时间都可以工作,但有时却不行。要点是:我创建一个套接字对,创建读写流,然后当我想写一些东西时,我将它安排在一个单独线程的运行循环上。像这样:

...其中 myWriteStreamCallback 是正确形式的静态函数...

套接字/流的打开方式如下:

现在问题来了:这段代码(还有更多,如果它对任何人有帮助的话)大部分是正确的,因为它大部分都有效。但是,有时,在程序的最开始,我可以尝试以这种方式发送一些数据,并且套接字的回调将正确地放置在运行循环中,但它永远不会被调用。稍后在程序中,将使用另一个套接字运行相同的代码,并且将调用回调(套接字转到相同的地址)。

我知道这很模糊,但是在我发布所有代码之前,是否有人对可能导致这种情况的事情有任何粗略的想法?回调有时不会在运行循环上被调用,也就是说。

哦,是的,我应该补充一点,这显然是某种类型的竞争条件——我可以通过在正确的位置添加日志语句来不可靠地解决问题。然后,它有时工作,有时不工作,使用完全相同的代码。好玩。

0 投票
1 回答
1021 浏览

iphone - 在 iPhone 上尝试 SimplePing,但主运行循环不处理来自 SimplePing 的事件

我需要一个简单的 iPhone 上的 pinger。所以我尝试让SimplePing 示例 在 iPhone 上运行。但是当我像示例中那样初始化 pinger 时,主运行循环不会处理 SimplePing 生成的事件。这是初始化代码:

如果我直接在这个函数中触发 runloop,如下所示:

有用。所以我的问题是,为什么事件没有在主运行循环中处理UIApplicationMain,我必须做什么才能让主运行循环完成?

0 投票
3 回答
1515 浏览

objective-c - 按键时停止 NSRunLoop

我正在 Mac OS X 中编写一个命令行基础工具,并希望该工具在诸如“q”之类的按键时退出。该代码正在启动从远程服务器检索数据的异步请求。这需要 NSRunLoop。至少这是我理解我需要做的。

有人可以告诉我如何在特定按键上停止运行循环吗?

下面是代码片段。

谢谢!

0 投票
1 回答
581 浏览

iphone - (iphone) 如何在这里正确设置运行循环?许多问题

我刚刚开始阅读苹果的线程编程指南。
我正在启动一个线程并引用它

并且 threadMain 看起来像文档中的示例代码。
我需要从主线程更改代码中的“exitNow”变量以终止该线程,但不知道如何。
myThreadMain 循环在不执行任何工作时需要休眠,但也不知道如何实现它。
文档说如果新线程不会立即死亡,我将需要至少一个输入源,但是新线程只需要接收“立即退出消息”和 performSelector:onThread: 调用。
我应该设置输入源吗?

我将把一些工作交给这个线程

要执行的选择器需要定义如下,
但也不知道如何实现。

这是很多问题......
让我重申我的问题。

  1. 如何设置存储在 threadDict 中的“exitNow”变量。
  2. 如何设置线程以便在不需要工作时(当它不执行选择器时)休眠。
  3. 我应该设置一个输入源以使线程不会立即死亡吗?
  4. 如何设置运行循环,以便每次调用“performSelector”时,取消相同的选择器(如果它正在执行),并从头开始运行它?

提前致谢。

0 投票
2 回答
392 浏览

cocoa - 如何使可可编程中的每一帧都调用一个函数?

我知道可可应用程序有一个主运行循环,如何让每帧都调用一个函数?我的意思是这个函数应该在主循环的每个进程中调用。是通过 + (NSRunLoop*) currentRunLoop; 的 -(void) 运行吗?

0 投票
1 回答
457 浏览

iphone - runloops 和 application:didFinishLaunch 消息顺序

我对 Runloops 的理解是基本的,所以这似乎是一个非常陈词滥调的问题。

我的application:didFinishLaunchingWithOptions(或applicationDidFinishLaunching)中有以下内容:

这些方法中的每一个是否都按列出的顺序执行,或者是否有可能在应用程序的主运行循环完成放置主窗口的工作之前发生第 5 步'[window makeKeyAndVisible]'

是否doSomeTaskHere需要包装成 aperformSelectorOnMainThread:withObject:waitUntilDone:YES以确保 runloop 完成窗口的显示,从而在doSomeTaskHere调用 ' ' 之前加载最顶层视图的任何视图?

0 投票
10 回答
23529 浏览

ios - 有没有办法让 drawRect 现在工作?

如果您是 drawRect 的高级用户,您会知道当然 drawRect 在“所有处理完成”之前不会真正运行。

setNeedsDisplay 将视图标记为无效和操作系统,并且基本上等到所有处理完成。在您想要的常见情况下,这可能会令人愤怒:

  • 视图控制器 1
  • 启动一些功能 2
  • 其中增量 3
    • 创作出越来越复杂的艺术品和 4
    • 在每一步,你设置NeedsDisplay(错误!)5
  • 直到所有工作完成 6

当然,当您执行上述 1-6 时,所发生的只是 drawRect仅在第 6 步之后运行一次。

您的目标是在第 5 点刷新视图。怎么办?

0 投票
1 回答
8700 浏览

iphone - iOS 游戏和运行循环管理

首先,我的问题:你如何管理你的 iOS 运行循环?

接下来是我的理由:我一直在用各种原型(v. 早期开发)对此进行研究,并发现了许多令人困惑的问题。

  • 首先,输入问题和运行循环引导我尝试以下操作:
    • 当使用最推荐的系统(CADisplayLink)时,我注意到一旦 CPU 负载导致缓冲区翻转(presentRenderBuffer)必须等待一帧,某些触摸输入就会被丢弃。这仅发生在设备上,而不发生在模拟器中(令人讨厌 - 这似乎与等待主线程上的 vsync 阻塞以及应用程序运行循环处理触摸输入和吃消息的方式有关)
    • 当使用下一个最推荐的系统(NSTimer)时,我注意到一旦 CPU 负载达到模拟器中的某个点而不是设备中的某个点,某些触摸输入就会被丢弃(也很烦人)。NSTimer 还会导致我的更新触发时的精度低得多
    • 当使用最不推荐的系统时(在它自己的线程中运行运行循环,使用从 mach_absolute_time 构建的高精度计时器在内部管理,我所有的触摸输入问题都消失了,但是我的 ASSERT 代码现在陷入了错误的线程,并且只有当我睡着了跟随软件中断。(我的断言代码类似于http://iphone.m20.nl/wp/?p=1)我真的很喜欢让我的断言代码立即陷入导致问题的行,所以这个解决方案是对我来说不太可行:更难调试。
  • 二、浪费时间:
    • 在调查系统时,我发现无论帧率如何(奇怪的是,但我认为在统计上它仍然有意义 w/vsync)我正在等待大约 22% 的时间在 vsync 上。我已经通过移动 glFlush/glFinish 并玩弄我执行 presentRenderBuffer 调用的频率来确认这一点。这是我喜欢处理 AI 等的关键时刻,而不是简单地停止阻塞 gl 调用。我能想到的唯一方法是将渲染移到它自己的线程中,但我不确定是否有必要开始重新设计单处理器设备上的多线程架构。

那么有没有人找到解决这些问题的灵丹妙药?有没有人在这个平台上有一个杀手级的运行循环架构?目前看来,我必须从邪恶中取其轻。

0 投票
3 回答
1004 浏览

objective-c - runModalForWindow 限制 http 请求

我有 url 连接,通常工作正常

但是当我创建一个模式窗口时,没有任何请求收到响应:

如果我将此行注释掉,从而创建一个“标准”窗口,那么一切正常。

我尝试实现来自 NSURLConnectionDelegate 的所有方法,而不是其中一个被调用。

我怀疑这与“运行循环”有关,但在这方面的经验很少。有人有这方面的经验吗?

谢谢