On Sep 21, 2010, at 5:55 AM, Rafael Cerioli wrote:

> Hi,
> 
> I'm trying to understand how run loops work. I've written this useless piece 
> of code and I'm not sure why "success" does not show up...
> What happens is that waitUntilReady never terminates, because it seems that 
> the runUntilDate in myButtonAction never ends as well.

Yes, as that is what your code is doing.

> My theory would be that calling a runUntilDate from myButtonAction 
> (myButtonAction is started by a run loop observer)  will just prevent other 
> sources and observers in the *current* run loop's loop (or run loop's run ??) 
> to be processed until myButtonAction terminates.

No--there is no "prevention" whatsoever. -runUntilDate: tells the current 
runloop *specifically* to process all input sources, and to not exit until all 
sources are processed *and* the specified expiration date has been reached. 

> So, waitUntilReady's call to runUntilDate would prevent the end of 
> myButtonAction's current run loop's loop.
> 
> Does someone have more info about that ?
> 
> - (void) myButtonAction {
>       // A button event has been sent, waking up the run loop and calling 
> that method 
> 
>       // this will be called in 1 second
>       [self performSelector:@selector(waitUntilReady) withObject:nil 
> afterDelay:1];

This is an input source, so the runloop will not exit until the method exits.

>       // process the current run loop during 10 seconds :
>       [[NSRunLoop currentRunLoop] runUntilDate:[NSDate 
> dateWithTimeIntervalSinceNow:10]];

Which never happens, as you never get to this line, because the method cannot 
exit.

>       [self setReady:YES];
> }
> 
> - (void) waitUntilReady {
> 
>       while(![self isReady]) {
>               // this should just process the run loop once :
>               [[NSRunLoop currentRunLoop]  runUntilDate:[NSDate date]];
>       }
> 
>       NSLog(@"success!");
> }

HTH,

Keary Suska
Esoteritech, Inc.
"Demystifying technology for your home or business"

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to