Last active
August 29, 2015 14:19
-
-
Save boylee1111/683e00d873bceaaf8c96 to your computer and use it in GitHub Desktop.
Checking for an exit condition during a long job.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// From Apple official document | |
// https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Multithreading/CreatingThreads/CreatingThreads.html#//apple_ref/doc/uid/10000057i-CH15-SW15 | |
- (void)threadMainRoutine | |
{ | |
BOOL moreWorkToDo = YES; | |
BOOL exitNow = NO; | |
NSRunLoop* runLoop = [NSRunLoop currentRunLoop]; | |
// Add the exitNow BOOL to the thread dictionary. | |
NSMutableDictionary* threadDict = [[NSThread currentThread] threadDictionary]; | |
[threadDict setValue:[NSNumber numberWithBool:exitNow] forKey:@"ThreadShouldExitNow"]; | |
// Install an input source. | |
[self myInstallCustomInputSource]; | |
while (moreWorkToDo && !exitNow) | |
{ | |
// Do one chunk of a larger body of work here. | |
// Change the value of the moreWorkToDo Boolean when done. | |
// Run the run loop but timeout immediately if the input source isn't waiting to fire. | |
[runLoop runUntilDate:[NSDate date]]; | |
// Check to see if an input source handler changed the exitNow value. | |
exitNow = [[threadDict valueForKey:@"ThreadShouldExitNow"] boolValue]; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment