> On 14 Mar 2016, at 14:17, Quincey Morris 
> <quinceymor...@rivergatesoftware.com> wrote:
> 
> On Mar 13, 2016, at 23:50 , Gerriet M. Denkmann <gerr...@mdenkmann.de> wrote:
>> 
>> - (void)computeSomething
>> {
>>      self.message1 = @“Start computing”;
>>      //      some seconds of computations
>>      self.message1 = @“Result = 42”;
>> }
> 
> Assume, conceptually, that drawing only takes place asynchronously (that is 
> to say, setting a new value on the string invokes setNeedsDisplay, that’s 
> all), and it’s obvious why this isn’t going to work.
> 
> But the real issue is not that the text field won’t update, it’s that you’re 
> blocking the main thread with computation. You should move the computation 
> off the main thread — using dispatch_async to a default queue. At the end of 
> the computation, go back to the main thread (dispatch_async again, specifying 
> the main queue this time) and put the result in the text field.
> 
> This is, of course, going to introduce threading issues into your design. If 
> the background thread keeps its results private (within the thread) until you 
> switch back to the main thread, you can actually update any permanent data 
> structures on the main thread, avoiding the need for locks or other 
> synchronization techniques. However, you have to arrange for the main thread 
> to avoid trying to use the results before the background computation is done, 
> or to start any new computations, until the old ones are done, as far as such 
> safety checks are necessary for your app.
> 
> (You can use NSOperationQueue instead of GCD, but I don’t see a lot of 
> advantage in that. The consequences are the same.)

You are absolutely right that a background would be the right thing.
But this is just a small tool for testing, and it will not take more than a few 
seconds, so I am trying to avoid this.

But I have found a solution (you mentioning setNeedsDisplay was a great help):

- (void)computeSomething
{
        self.textField1.stringValue = @“Start computing”;
        [self.textField1 display];
        //      some seconds of computations
        self.textField1.stringValue = @“Result = 42”;
}

Gerriet.



_______________________________________________

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to