gpt4 book ai didi

iphone - 创建自定义 NSRunLoop

转载 作者:行者123 更新时间:2023-12-03 19:23:28 26 4
gpt4 key购买 nike

我开始将 RunLoop 理解为类似于 Java 中的事件队列。我现在尝试做的 Wgat,只是为了更好地理解,是在运行自己的 RunLoop 的应用程序中创建一个后台线程。我在示例 ViewController 中得到了这样的结果,然后陷入困境:

@implementation iPhoneRunLoopsViewController

-(void) workerMain
{
[[NSRunLoop currentRunLoop] run];
}

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
{
worker = [[NSThread alloc] initWithTarget:self selector:@selector(workerMain) object:nil];
[worker start];
}

- (IBAction)go:(id)sender {

}

根据苹果文档:

Before you run a run loop on a secondary thread, you must add at least one input source or timer to it. If a run loop does not have any sources to monitor, it exits immediately when you try to run it. For examples of how to add sources to a run loop, see “Configuring Run Loop Sources.”

我正在尝试在我的 init 方法中启动一个自定义线程,该线程将用于任意工作。我想将“go”方法中的工作发送到这个任意线程中。我不知道如何将工作从类似 go 方法(将连接到 Go 按钮)发送到 RunLoop 中。假设我想从 1 数到 10,并在该辅助线程的每个步骤之间有一个小的延迟。我会在 go 方法中添加代码,以使用辅助线程的 RunLoop 来安排工作,执行类似 PerformOnThread... 我是否在启动时缓存对此运行循环的引用?如何启动运行循环并让它等待工作? (如何使用自定义输入源配置运行循环?)显然,如果运行循环没有计时器或输入源,则运行方法只会返回。我已经看过讨论如何使用 CF 函数创建自定义源的文档,但我没有看到所有这些如何插入在一起的清晰示例。有人可以帮忙吗?

最佳答案

要继续,请调用 CFRunLoopRun$或连接 CF 或 NS 计时器

如果您想缓存运行循环(对于连续调用,您可以)。也许最好从子类化 NSThread (你的工作变量)开始,并为其提供一些要做的事情,以及完成后要报告的一些内容(这就是你真正的多线程问题开始的地方)。因此,运行循环附加了一个计时器,一直工作到完成,如果计划继续,则休眠。作为一个概述,我希望这是有道理的。

Do I cache a reference to this run loop on startup?

如果您只需要从工作线程中获取它,那确实没有必要。

How do I start the run loop and make it wait for work?

您可以通过启动线程并从线程访问它来启动它。通过告诉它运行(即在模式下)或附加计时器来继续运行。

关于iphone - 创建自定义 NSRunLoop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1753379/

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