• 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: runloops and NSURLConnection
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


References: 
 >Re: runloops and NSURLConnection (From: Torsten Curdt <email@hidden>)

  • Prev by Date: Re: how to implement ETA
  • Next by Date: NSColorWell and alpha
  • Previous by thread: Re: runloops and NSURLConnection
  • Next by thread: Re: runloops and NSURLConnection
  • Index(es):
    • Date
    • Thread