代码之家  ›  专栏  ›  技术社区  ›  bastibe

如何创建只侦听performselector:onwread:和gui事件的运行循环?

  •  0
  • bastibe  · 技术社区  · 14 年前

    我想创建一个独立的线程来运行它自己的窗口。坦率地说,文件对我来说没有意义。

    所以我创造了一个 NSThread 有一个主要功能。我启动线程,创建 NSAutoreleasePool ,然后运行运行循环:

    // Global:
    BOOL shouldKeepRunning = YES;
    
    - (void)threadMain {
        NSAutoreleasePool *pool = [NSAutoreleasePool new];
        // Load a nib file, set up its controllers etc.
        while (shouldKeepRunning) {
            NSAutoreleasePool *loopPool = [NSAutoreleasePool new];
            [[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantFuture]];
            [loopPool drain];
        }
        [pool drain];
    }
    

    但由于没有注册的港口或观察员, runUntilDate: 立即退出,CPU利用率达到100%。

    所有线程通信都由调用 performSelector:onThread:withObject:waitUntilDone: . 显然,我没有正确使用api。那么,我做错什么了?

    1 回复  |  直到 14 年前
        1
  •  4
  •   Joshua Nozzi    14 年前

    很多appkit不是线程安全的,而且 无法正常工作 (1)在主线程外操作时。你会发现只有痛苦和痛苦试图忽略这个事实。

    你是干什么的 真的很努力 这个窗口需要不同的线程吗?你只是想保持一个响应的用户界面吗?如果是的话 许多的 更好的方法。请参阅nsoperation/nsoperationqueue(其中“工作单元”和“队列”是焦点,而不是“此窗口应在此线程上运行等”)。

    我建议你把你的问题重提一遍,把你的具体目标讲清楚。

    (1)对于一些班级来说,这需要很多细致的工作。对其他人来说,他们是相当严格的禁区。