第32月第30天 runloop阻塞线程 超时
作者:互联网
1. runloop阻塞线程 超时
bool CvCaptureCAM::grabFrame(double timeOut) { NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; double sleepTime = 0.005; double total = 0; // If the capture is launched in a separate thread, then // [NSRunLoop currentRunLoop] is not the same as in the main thread, and has no timer. //see https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsrunloop_Class/Reference/Reference.html // "If no input sources or timers are attached to the run loop, this // method exits immediately" // using usleep() is not a good alternative, because it may block the GUI. // Create a dummy timer so that runUntilDate does not exit immediately: [NSTimer scheduledTimerWithTimeInterval:100 target:nil selector:@selector(doFireTimer:) userInfo:nil repeats:YES]; while (![capture updateImage] && (total += sleepTime)<=timeOut) { [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:sleepTime]]; } [localpool drain]; return total <= timeOut; }
标签:capture,Reference,no,32,30,线程,sleepTime,double,total 来源: https://www.cnblogs.com/javastart/p/10949069.html