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 (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 [EMAIL PROTECTED]

Reply via email to