我想取消NSOperationQueue使用swift中的所有線程,但它不起作用。取消NSOperationQueue不能在迅速工作
我想在用戶單擊按鈕時啓動並停止使用NSOperationQueue的線程。如果執行myFunc的時間超過20秒,計時器將停止並顯示警報。
下面是我的代碼:
import UIKit
class ViewController: UIViewController {
var myTimer = NSTimer()
var isSet = true
var icount = 0
let operationQueue = NSOperationQueue()
override func viewDidLoad() {
super.viewDidLoad()
}
var th123:NSThread!
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func myFunc()
{
println("Thread start..")
}
@IBAction func btnClickEvent(sender: AnyObject) {
if(isSet == false)
{
isSet = true
myTimer.invalidate()
// th123.cancel()
operationQueue.cancelAllOperations()
btnClick.setTitle("Start", forState: UIControlState.Normal)
//NSThread.exit()
}
else if (isSet == true)
{
isSet = false
myTimer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: Selector("checkTime"), userInfo: nil, repeats: true)
NSLog("Timer started..")
btnClick.setTitle("Stop", forState: UIControlState.Normal)
Other()
}
}
func myfunc1()
{
}
func checkTime()
{
icount = icount + 10
if(icount > 18) {
isSet = false
operationQueue.cancelAllOperations()
let alertController = UIAlertController(title: "iOScreator", message:
"Opps Some Error occurred !!", preferredStyle: UIAlertControllerStyle.Alert)
alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Default,handler: nil))
self.presentViewController(alertController, animated: true, completion: nil)
myTimer.invalidate()
btnClick.setTitle("Start", forState: UIControlState.Normal)
}
}
func Other() {
customOperation.completionBlock = {
MyObject.myFunc()
}
var workerBlockOperation:NSBlockOperation = NSBlockOperation.self.init(
block: {
MyObject.myFunc()
}
)
operationQueue.addOperation(customOperation)
operationQueue.addOperation(workerBlockOperation)
}
@IBOutlet weak var lblstatus: UILabel!
@IBOutlet weak var btnClick: UIButton!
}
MyObject.swift文件
進口基金會
class MyObject {
class func myFunc()
{
NSLog(" myFunc called ")
for i in 1...1000000 {
println(i)
}
}
}
我寧願去與NSThread但我不知道如何強制停止/殺死NSthread。
我加了下面的代碼,但仍無法取消任務
所有取消'NSOperation'確實將'cancelled'設置爲'true'。您的操作應該定期檢查它是否被取消,並在發生這種情況時停止任何工作。你沒有這樣做。 –
我不確定你到底想要完成什麼,但我從來沒有見過用這種方式混合使用「NSOperation」和「NSThread」。我不知道你的操作爲什麼在其外使用引用('self.th123'),但這通常是糟糕的設計。你的實際目標是什麼? –
@ Aaron Brager - 我的目標是當用戶點擊按鈕啓動一個執行某些操作的線程,並且當單擊相同的按鈕時,即我的線程應該強制停止。同時這樣做,我的用戶界面不應該被阻止。因此使用NSThread NSOperation。 – cybergeeeek