How to create a run loop that only listens to performSelector:onThread: and GUI events?
        Posted  
        
            by Paperflyer
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Paperflyer
        
        
        
        Published on 2010-04-13T19:43:41Z
        Indexed on 
            2010/04/13
            20:23 UTC
        
        
        Read the original article
        Hit count: 571
        
cocoa
|multithreading
I want to create a separate thread that runs its own window. Frankly, the documentation does not make sense to me.
So I create an NSThread with a main function. I start the thread, create an NSAutoreleasePool, and run the run loop:
// 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];
}
But since there is no registered port or observer, runUntilDate: exits immediately and CPU utilization goes to 100%.
All thread communication is handled by calls to performSelector:onThread:withObject:waitUntilDone:. Clearly, I am not using the API correctly. So, what am I doing wrong?
© Stack Overflow or respective owner