On Nov 11, 2010, at 8:13 AM, Shane wrote: > I've got an NSOperation thread running, but I'd like to be able to > send a message to it so that the thread can be shut it down, or > possibly other commands. > > What is considered a good way to send a message to an NSOperation > thread from the apps main thread?
Usually, NSOperation objects execute on threads managed by the corresponding NSOperationQueue where you added them, e.g.: MyOperation* op = [[MyOperation alloc] initWithMyParams:params]; [self.myOperationQueue addOperation op]; So, whatever operation queue you use, the *operation queue* is responsible for managing the threads your operation will execute on. The operation queue hides the complexity to create and destroy the threads - which is a good thing. Which threads the operation queue creates and when is a private thing to the operation queue. So, you should not bother with this. Note, that there is a global queue [NSOperationQueue mainQueue] which executes its operations on the main thread. In order to cancel an *operation* (not a thread) you can send the operation object the -cancel message from any other execution context. All what is required is to design the method -main of your operation such that it periodically checks whether it has been cancelled, e.g.: - (void) main { if ([self isCancelled]) return; BOOL done = NO; while (!done) { // do a peace of work // ... if ([self isCancelled]) { // optionally send the "delegate" a notification about the cancellation. return; } } // send the "delegate" a message about the result of the operation } Note: "delegate" is defined in your custom Operation. When you send (custom) messages to an operation, you should care about proper synchronization if necessary. see also: NSOperationQueue: -cancelAllOperations NSOperation: -cancel NSOperation: "Responding to the Cancel Command" http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSOperation_class/Reference/Reference.html http://developer.apple.com/cocoa/managingconcurrency.html Have fun! Andreas _______________________________________________ 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