Re: How to make a RunLoop patiently do nothing?
Re: How to make a RunLoop patiently do nothing?
- Subject: Re: How to make a RunLoop patiently do nothing?
- From: "Michael Ash" <email@hidden>
- Date: Wed, 3 Dec 2008 23:24:33 -0500
On Wed, Dec 3, 2008 at 11:11 PM, Sean McBride <email@hidden> wrote:
> You said you wanted your thread to 'patiently wait for
> performSelector:onThread: calls'? When do you want it to stop waiting?
> If at app quit time, then just leave it around. If earlier, then just
> send it a message to clean itself up (dealloc memory, etc.) and
> invalidate the timer. Then you are back to having no runloop sources
> and voila.
Don't do this. When the docs say that your runloop will exit when no
sources are installed on the runloop, this is a warning, not a guide
for how to make it exit. The system may install its own sources and
not remove them just because you want to exit, in which case your
thread will run forever. Worse, this may happen on an OS release later
than the one you tested with, causing your app to leak threads after
you've already shipped it.
The best way would probably be to do something like this:
NSDate *distantFuture = [NSDate distantFuture];
NSThread *myThread = [NSThread currentThread];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
while(![myThread isCancelled])
[runLoop runMode:NSDefaultRunLoopMode beforeDate:distantFuture];
Then to kill the thread, do [thread cancel] and then you'll have to
jog its runloop, so fire off a dummy message to it as well to make it
fall out and hit the while again and exit cleanly.
Mike
_______________________________________________
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