簡體   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