我有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实际执行的操作(如果之前已执行)。

10-08 06:07