Re: Detaching a thread to save a file?
Re: Detaching a thread to save a file?
- Subject: Re: Detaching a thread to save a file?
- From: Ken Thomases <email@hidden>
- Date: Fri, 11 Dec 2009 17:15:24 -0600
On Dec 11, 2009, at 4:43 PM, Keith Blount wrote:
The problem is that if the project grows in size, saving this
dictionary to disk can take two or three seconds. For this reason, I
would like to save it in the background, so it doesn’t hold up the
interface. According to Scott Anguish’s Cocoa Programming book,
NSThread is ideal for this sort of thing, and that is what I would
like to do (I’m stuck supporting Tiger, so I need to use -
detachNewThreadSelector:). But I can’t find any obvious examples of
detaching a thread specifically to save a file.
So, my question is - and I already apologised for its basicness :) -
what is the best way to detach a thread for saving a file, and what
issues do I need to be aware of? For instance, what if the user
tries to close the project (document) while the other thread is
saving the file?
Presumably it’s not as simple as using -detachNewThreadSelector:...
to spawn a thread that just does a simple -writeToFile: method.
It could very well be that simple.
The danger with secondary threads is if they may access data
structures that are also accessible from other threads, especially if
one of the threads may be altering the data structure.
So, the easiest way to be safe is to have the thread deal only with
data to which it has exclusive access. For example, if you were going
to write an array to file, you might be tempted to pass to the
background thread a reference to the NSMutableArray ivar that your
document object holds. The problem is that while the background
thread is invoking -writeToFile: on the array, the main thread is
mutating it. One solution is to make a copy of the array in the main
thread and pass the copy to the background thread.
With respect to the user closing the document while the other thread
is saving, that depends. From your description, it seems as though
the thread would be writing a non-essential adjunct file, not the
document itself. In that case, you should be fine. The thread may
continue with its (independent) write operation.
Cheers,
Ken
_______________________________________________
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