是否有 OSX/Cocoa 惯用的方法来创建执行周期性操作的可取消线程,即
while not cancelled:
cancelable sleep for N seconds
if sleep was cancelled:
return
else:
do periodic task
在POSIX中,可以用线程、条件变量和标志来创建;我写了一个simple implementation (链接到要点;为简洁起见,从问题中省略),但这确实是一个教科书示例。正如你所看到的,它有很多行代码,而且我确信这样一个典型的事情有一个简单的解决方案。
我考虑过的选项:
NSTimer
提供相同的语义,但在 UI 线程上执行。Grand Central Dispatch (GCD) 无法取消,我确实希望能够尽快取消该操作。
最佳答案
使用 NSOperationQueue
和 NSOperation
。这些类使用 gcd。可以使用 cancel
操作取消 NSOperation
。
关于objective-c - OS X(Cocoa 等)创建可取消周期性操作的惯用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31627832/