• 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: Weird Threads (repost)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Weird Threads (repost)


  • Subject: Re: Weird Threads (repost)
  • From: Shawn Erickson <email@hidden>
  • Date: Thu, 12 Feb 2004 18:10:21 -0800

On Feb 12, 2004, at 5:33 PM, Sam McCandlish wrote:

I am trying to use an NSThread for a complex drawing operation. In my custom view, when drawRect is called, I detach to another method in myself. The view draws fine. The problem is that the app still acts like it's not multithreaded, the interface still locks up until the drawing is complete. Any ideas?

Here is the drawRect function:
- (void)drawRect:(NSRect)rect {
[NSThread detachNewThreadSelector:@selector(drawRectThreaded:) toTarget:self withObject:NSStringFromRect(rect)];
return;
}

Not sure how this would work given that your control of the graphic context goes away after drawRect returns. Do you lock focus in your drawRectThreaded method?

The first thread seems stuck in the following while the view is drawing (this is copied from the debugger)
#0 0x90017048 in semaphore_wait_signal_trap
#1 0x9000e890 in _pthread_cond_wait
#2 0x92dca068 in -[NSViewHierarchyLock lockForWriting]
#3 0x92dd494c in -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:]
#4 0x92ded8d0 in -[NSView displayIfNeeded]
#5 0x92dfe598 in -[NSWindow displayIfNeeded]

Note the "lockForWriting" in the above. It is attempting to lock the view for updating and I bet your secondary thread is holding the lock, which it likely needs to do when it is drawing.

Have you considered doing your complex drawing into an NSImage (lock focus on the image and draw like your would normally) in a secondary thread and then composite that image in your drawRect method? It would make sense to only redraw / composite what has actually changed.

Anyway what are you doing in your complex drawing? We may be able to suggest alternate solutions.

-Shawn
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.

References: 
 >Weird Threads (repost) (From: Sam McCandlish <email@hidden>)

  • Prev by Date: Re: Weird Threads (repost)
  • Next by Date: Re: Weird Threads (repost)
  • Previous by thread: Re: Weird Threads (repost)
  • Next by thread: Re: Weird Threads (repost)
  • Index(es):
    • Date
    • Thread