繁体   English   中英

取消Objective-C中的后台线程

[英]cancel a background thread in Objective-C

如何取消Objective-C中的后台线程?

我正在调用后台线程,如下所示:

[self performSelectorInBackground:@selector(setupThumbnails) withObject:nil];

在滑动发生时调用它,对于我想要取消先前后台线程请求的每次滑动。

维护线程的取消属性,并在线程中定期检查。 您需要使用锁或原子函数(由操作系统及其框架提供,而不是自己实现!)来指示应该取消线程。 系统提供的原子函数记录在atomic

更好的是在NSOperationQueue而不是NSThread上使用NSOperation。 它仍将使用线程在后台执行工作,但它允许框架和操作系统代表您管理线程池,NSOperation本身具有您可以检查的isCancelled属性 - 以及取消单个NSOperation的能力或整个NSOperationQueue中的所有操作。

例如,您可以使用“设置一个缩略图”操作,然后只需将一个此类操作添加到队列中,即可设置每个缩略图。 操作系统和框架将合作管理用于执行这些操作的线程数,但您也可以设置队列的宽度,以确保最多只能同时运行多个导入。 如果用户取消,您可以要求队列取消所有未完成的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM