I’ve a multi-threading application in which each thread has to do some job, but at a certain point some code needs to be executed serially (like writing into sqlite3 database), so I’m calling that code to be performed on main thread using:
[self performSelectorOnMainThread:@selector(serialJob:) withObject:object waitUntilDone:YES];
and every thing went just fine except that when that code needs some time the user interaction with the application gets disabled until that code has been finished, so is there any way to make another ONE thread that can be run on background and can be called whenever I need it just like the main one so I can replace the previous call with:
[self performSelector:@selector(serialJob:) onThread:REQUIRED_THREAD withObject:object waitUntilDone:YES];
this thread should be some class’s static data member to be accessed from all over the code.
any help would be very appreciated, and many thanks in advance…
Due to the my question that I need the current thread to be blocked until the database job has been finished, I’ve tried these two solutions and they worked perfectly. You can either use critical sections or NSOperationQueue and I prefer the first one, here is the code for both of them:
define some class “DatabaseController” and add this code to its implementation:
OR to use the NSOperationQueue you can use:
these two solutions block the current thread until the writing to database is finished which you may consider in most of the cases.