我有c ++ API,它通过网桥文件连接。我很遗憾,在此API内有一个函数,它具有无限循环等待数据到达。
当用户单击开始按钮时,我通过以下方式调用此函数:
workItem = DispatchWorkItem {
foo()
}
DispatchQueue.global(qos: .background).async(execute: workItem!)
函数填充c ++算法内部的变量,尤其是所提供数据的数组。
当用户单击停止按钮时,我使用以下命令停止了该线程:
self.workItem?.cancel()
唯一的问题是它不会杀死该线程并清除内存。我知道这一点,因为当用户再次单击“开始”按钮时,它将继续使用c ++数组中的旧数据
有没有一种方法可以杀死该特定线程并清除内存,以便在每次启动/停止时用户都可以启动新会话
最佳答案
就GCD而言,WorkItem Cancel等同于dispatch_block_cancel。
从该类推得出,已经开始执行的块不会停止。只有待执行的工作项才有可能被停止。
停止时,您可能必须手动撤消WorkItem实际执行的操作(如果之前已执行)。