Re: runloops and NSURLConnection
Re: runloops and NSURLConnection
- Subject: Re: runloops and NSURLConnection
- From: Jean-Daniel Dupas <email@hidden>
- Date: Sun, 1 Jun 2008 18:18:27 +0200
Le 1 juin 08 à 14:27, Torsten Curdt a écrit :
If you handle the modal session yourself, it's easy to let the
connection do some processing while the modal window is open:
Replace -[NSApp runModalForWindow:[self window]] by this and it
should do the trick.
/* Create a modal session, and in each loop,
we process the default runloop event sources (url download,
network connections, etc.) */
NSModalSession session = [NSApp beginModalSessionForWindow:[self
window]]; // 1
for (;;) {
if ((result = [NSApp runModalSession:session]) !=
NSRunContinuesResponse) // 2
break; // 3
/* Note: Do not use a 0 timeout, else this loop will never
block and will consume a lots of CPU.
In fact, the Cocoa UI event port is scheduled in the default
runloop, so each Cocoa event will wakeup the runloop. */
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:[NSDate distantFuture]];
//[[NSRunLoop currentRunLoop] runUntilDate:[NSDate
distantFuture]]; // 4
}
[NSApp endModalSession:session];
So that basically means I create my own run loop and call out into
the non-modal one from time to time, right?
Just wondering about the "from time to time" part.
cheers
--
Torsten
Argh, This code does not works (there is no launch and test button in
Mail :-)).
You have to call [[NSRunLoop currentRunLoop]
runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
else it will never returns.
You never create a runloop. Each thread has a "current loop" which
support recursive call to "run".
This snippet create a modal session. (//1)
Then it check the modal session state and process UI events if some
events are ready ([NSApp runModalSession:session]) (//2)
Note that runModalSession: does not block and always returns immediatly.
If the user stop the modal session, it stop the loop (//3)
After that it blocks until something append (network event, ui event,
etc). (//4)
Each time a network event occurs, the run loop pass it to the handler
(NSURLConnection in your case).
Each time a UI event occurs, the run loop push it on the UI event
queue and the next call the runModalSession: process it.
Each time an event occurs, runMode:beforeDate: returns.
_______________________________________________
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