5

我有点搞乱线程。现在考虑一下:我有一个主线程。我开始一个新线程。在它的入口点方法中,我想创建一个运行循环。现在文档告诉我我必须有一个输入源。否则我的运行循环会立即退出。坏的。好的。但除了我的 performSelector... 方法调用之外,我没有其他输入源。线程启动后,会出现一个 performSelector 方法,该方法会在延迟一段时间后启动该线程上的另一个方法。在该方法内部发生另一个 performSelector 调用,依此类推。每个都有 0.1 到 1 秒的延迟。所以重复触发计时器是没有意义的;-)

我如何设置该运行循环,使其保持活动状态以接收来自 performSelector 的踢?我希望线程在无事可做时休眠。但是当一个 performSelector 踢到他的屁股时,我希望线程唤醒并工作。

任何建议,有人吗?

4

2 回答 2

3

您想要的代码在线程编程指南的运行循环中的图 3-14 中进行了解释。但是它在其他讨论中被隐藏得如此之深,以至于如果您不了解此页面上的其他所有内容,您将不会完全知道您在看什么。阅读该部分,然后希望这段代码有意义:

- (void)startRunLoop:(id)sender
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    // Any thread setup

    do
    {
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
                                 beforeDate:[NSDate distantFuture]];
    } while (self.isStarted);

    // Any thread cleanup

    [pool release];
}
于 2009-10-26T18:52:33.340 回答
-1

你没有描述你真正想要做什么,所以很难说,但听起来你有点过于复杂了。

我相信您只想拥有一个线程(以您喜欢的任何方式启动),并且该线程应该使用 NSCondition/NSLock 来休眠,直到您希望它唤醒为止。

请参阅此 SO 线程以获取类似的问题和解释如何执行此操作的好答案:

于 2009-10-25T15:59:34.813 回答