objective-c - OS X(Cocoa 等)创建可取消周期性操作的惯用方法

标签 objective-c multithreading macos cocoa pthreads

是否有 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) 无法取消,我确实希望能够尽快取消该操作。

最佳答案

使用 NSOperationQueueNSOperation。这些类使用 gcd。可以使用 cancel 操作取消 NSOperation

关于objective-c - OS X(Cocoa 等)创建可取消周期性操作的惯用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31627832/

相关文章:

iphone - RestKit 序列化对象快捷方式

objective-c - 如何保存 UICollectionViewCell 的状态

java - 在 macOS (Mac OS X) 上打印 Java 类路径

ruby - 无法安装 RMagick 2.13.2

objective-c - 将 [touches anyObject] 更改为与数组中的任何对象接触

python - 从 Objective-C 调用到 Python

python - 线程在调用 Thread.start 之前开始运行

java - Java:Stack实现中的线程同步

c# - 同一时刻调用两次的方法

eclipse - '"Eclipse"希望在运行多个 Eclipse 实例时连续访问文档文件夹警报中的文件