Hi. I have an NSOutputStream created and scheduled on some pre-created NSTrhead’s NSRunloop (a.k.a mySocketThread).
Now I wish to write to that stream in NSOperations that are scheduled on a serial NSOperationQueue (only one operation at a time). Important point is, I never know in what thread/context my SendMessageOperation will run. When it runs (main called by operation’s start) I inquire the stream for hasSpaceAvailable, and if so, I attempt to write my message. Otherwise, I set the operation object as delegate to the outputStream and bail - waiting for NSStreamEventHasSpaceAvailable. I do the same if I fail to write the complete message (only some of it written). Now the stream is scheduled on another thread’s runloop - which says I may receive stream events concurrently to my operation’s running. Synchronizing inside an NSOperation is plain ugly, and a bit against the reason I’m working with operation queues on the first place... I have special difficulty with operation cancellation. I can (of course) cancel scheduled messages that didn’t start, but I cannot (server protocol) send half-messages to my server - hence I can only abort a cancelled operation if stream error or end occurred (again - I can only know this via stream events). My question is this: If I (upon starting my operation) schedule the outputStream on the current operation’s runloop like thus: [self.outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; Will it automatically be removed from the original runloop it was scheduled on? (mySocketThread’s runloop)? Is re-scheduling the stream frequently advisable? If I change it from one runloop to another, are there any “gaps” in which I can lose important events (that will be handled by the output stream internally without me knowing) ? If I can change the outputStream’s scheduling to use the same of my currently running operation - that should solve my synchronizing problem. My operation can bail safely, and be re-called on its own thread, without concurrency. Any hint will be greatly appreciated. Thanks. Motti Shneor
_______________________________________________ Do not post admin requests to the list. They will be ignored. Macnetworkprog mailing list (Macnetworkprog@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/macnetworkprog/archive%40mail-archive.com This email sent to arch...@mail-archive.com