Re: Thread safe?
Re: Thread safe?
- Subject: Re: Thread safe?
- From: "Adam R. Maxwell" <email@hidden>
- Date: Sat, 29 Mar 2008 10:54:28 -0700
On Mar 29, 2008, at 6:44 AM, Trygve Inda wrote:
I am finding it hard to determine in many cases exactly what is
thread safe
as this is not complete:
http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/Thr
eadSafetySummary/chapter_950_section_2.html
Can I call the following from a thread?
segImageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
pixelsWide:100
pixelsHigh:100
bitsPerSample:8
samplesPerPixel:4
hasAlpha:YES
isPlanar:NO
colorSpaceName:NSDeviceRGBColorSpace
bitmapFormat:NSAlphaFirstBitmapFormat
bytesPerRow:100 * 4
bitsPerPixel:32];
segBaseAddr = [segImageRep bitmapData];
Yes. See
http://www.cocoabuilder.com/archive/message/cocoa/2007/11/15/193191
ISTR having problems specifying a nonzero bytesPerRow and passing NULL
for the bitmap data, so you might need to either manage the buffer
yourself or pass zero for bytesPerRow to allow NSBitmapImageRep to pad
it appropriately.
[segImageRep dealloc];
You should never call dealloc directly (well, unless you've overridden
-retain/-release to handle your own refcounting).
How about:
NSImage * image = [[[NSImage alloc] initWithContentsOfFile:path]
autorelease];
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:[NSGraphicsContext
graphicsContextWithBitmapImageRep:segImageRep]];
[image drawInRect:NSMakeRect(0, 0, [image size].width, [image
size].height) fromRect:NSMakeRect(0, 0, [image size].width, [image
size].height) operation:NSCompositeCopy fraction:1.0];
[NSGraphicsContext restoreGraphicsState];
Drawing into an NSImage is explicitly documented to be thread safe in
the article you linked to, and each thread has its own graphics
context. The post I linked to does indicate that you might want to
use [image setCacheMode:NSImageCacheNever]. If your goal is just to
get an NSBitmapImageRep from a file, it's probably easier just to use
+imageRepWithContentsOfFile:.
--
adam
On Mar 29, 2008, at 6:44 AM, Trygve Inda wrote:
I am finding it hard to determine in many cases exactly what is
thread safe
as this is not complete:
http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/Thr
eadSafetySummary/chapter_950_section_2.html
Can I call the following from a thread?
segImageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
pixelsWide:100
pixelsHigh:100
bitsPerSample:8
samplesPerPixel:4
hasAlpha:YES
isPlanar:NO
colorSpaceName:NSDeviceRGBColorSpace
bitmapFormat:NSAlphaFirstBitmapFormat
bytesPerRow:100 * 4
bitsPerPixel:32];
segBaseAddr = [segImageRep bitmapData];
Yes. See
http://www.cocoabuilder.com/archive/message/cocoa/2007/11/15/193191
ISTR having problems specifying a nonzero bytesPerRow and passing NULL
for the bitmap data, so you might need to either manage the buffer
yourself or pass zero for bytesPerRow to allow NSBitmapImageRep to pad
it appropriately.
[segImageRep dealloc];
You should never call dealloc directly (well, unless you've overridden
-retain/-release to handle your own refcounting).
How about:
NSImage * image = [[[NSImage alloc] initWithContentsOfFile:path]
autorelease];
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:[NSGraphicsContext
graphicsContextWithBitmapImageRep:segImageRep]];
[image drawInRect:NSMakeRect(0, 0, [image size].width, [image
size].height) fromRect:NSMakeRect(0, 0, [image size].width, [image
size].height) operation:NSCompositeCopy fraction:1.0];
[NSGraphicsContext restoreGraphicsState];
Drawing into an NSImage is explicitly documented to be thread safe in
the article you linked to, and each thread has its own graphics
context. The post I linked to does indicate that you might want to
use [image setCacheMode:NSImageCacheNever]. If your goal is just to
get an NSBitmapImageRep from a file, it's probably easier just to use
+imageRepWithContentsOfFile:.
--
adam
_______________________________________________
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: | |
| >Thread safe? (From: Trygve Inda <email@hidden>) |