On Mar 13, 2010, at 10:23 PM, Quincey Morris wrote:

> On Mar 13, 2010, at 19:33, Alexander Bokovikov wrote:
> 
>> I have a time-consuming procedure, and I'd like to show its progress. I 
>> can't use multi-threading for some technical reason.
>> I'm looking for a way to update a progress indicator from this procedure,
>> As far as I understand my task is to cause message loop processing.
>> And my question is - how to do it?
> 
> It's fairly straightforward -- repeatedly invoke a method that does the 
> following:
> 
>       NSEvent *event;
>       while ((event = [NSApp nextEventMatchingMask: NSAnyEventMask 
>                               untilDate: nil inMode: 
> NSEventTrackingRunLoopMode dequeue: YES]))
>               [NSApp sendEvent: event];
> 
> Make sure this is called often enough for responsiveness (say, at least every 
> 0.1 secs), but not too often to interfere with performance.
> 
> You might want to choose a different run loop mode, if you have special 
> requirements. NSEventTrackingRunLoopMode is sufficient to allow keystrokes 
> and mouse clicks to be processed, so that you can have a UI (say, Esc key or 
> button) to cancel the procedure if you want.

You should also see if 
-beginModalSessionForWindow:/-runModalSession:/-endModalSession: makes sense 
for your situation.  It does require that you can do the time-consuming task in 
discrete chunks.

Regards,
Ken

_______________________________________________

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 arch...@mail-archive.com

Reply via email to