Re: Problem with updating NSProgressIndicator
Re: Problem with updating NSProgressIndicator
- Subject: Re: Problem with updating NSProgressIndicator
- From: Matt Long <email@hidden>
- Date: Tue, 20 May 2008 07:40:39 -0600
I recently wrote a blog post with a demo xcode project that shows an
implementation of updating a progress indicator for file copy. You can
see it here: http://www.cimgf.com/2008/05/03/cocoa-tutorial-file-copy-with-progress-indicator/
It's a lowest common denominator example, so it might give you some
insight. Hope it helps.
-Matt
On May 20, 2008, at 12:53 AM, Vitaly Ovchinnikov wrote:
Hello
I work on Cocoa application that uses posix thread to perform big
calculations. I need to display the progress. Big caculations are done
with C++ and I have a callback function that called by the calculating
thread with the current progress (structure with data). I put this
structures to the queue (std::vector, guarded by the mutex). This is
the separate thread.
Now the main thread: I need to check my queue and (among other things)
update the progress. So I created NSTimer (with period of 0.1 second)
that checks my queue and (among other things) calls -setDoubleValue
for NSProgressIndicator. Maybe it looks a bit tricky, but it is just a
marshalling of structures from one thread to another, it worked fine
for me in Windows, it is tested etc....
Now the problem: progress indicator freezes. It doesn't even play
animation! It may move to 30% and freeze there. I tried
-setNeedsDisplay, -displayIfNeeded, even -display - they all don't
help. Progress doesn't move, but if I click the window at this moment
- progress returns to life and moves as it have to.
I tried to call -animate for progress in every timer cycle. In that
case progress animates but doesn't move!
I added NSLog() calls to make sure the code is called - it does. I
pass absolutely correct values. I placed NSTextField near the progress
and added -setDoubleValue call with the same value for the text field
- it updates, but progress is still frozen. I checked the thread where
I update progress - it is the main thread.
I tried to move progress update from timer to selector that was called
by performSelectorFromMainThread - doesn't help too.
While searching the Internet I found similar problems, but all of them
were related to main loop's block. Mine is not blocked - all
calculations performed in the separate thread. Calling -display that
always helps, doesn't help to me.
One more thing: I tried to replace simple -setDoubleValue with the
pair:
[progress setDoubleValue:0];
[progress setDoubleValue:nActualValue];
this helps, progress moves, but animation does not work anyway...
The problem... Ideas?
_______________________________________________
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