• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: NSRunLoop behavior
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSRunLoop behavior


  • Subject: Re: NSRunLoop behavior
  • From: Keary Suska <email@hidden>
  • Date: Tue, 21 Sep 2010 07:54:31 -0600

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 (email@hidden)

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:

This email sent to email@hidden

  • Follow-Ups:
    • Re: NSRunLoop behavior
      • From: Rafael Cerioli <email@hidden>
References: 
 >NSRunLoop behavior (From: Rafael Cerioli <email@hidden>)

  • Prev by Date: RE: Lyrics in an application
  • Next by Date: Re: Toolbar Item -Menu Form Representation - Key Equivalent
  • Previous by thread: NSRunLoop behavior
  • Next by thread: Re: NSRunLoop behavior
  • Index(es):
    • Date
    • Thread