我有 C++ API,它通过桥接文件连接。在这个 API 中,有一个函数,令我遗憾的是,它有无限循环等待数据到达。
当用户单击开始按钮时,我通过以下方式调用此函数:
workItem = DispatchWorkItem {
foo()
}
DispatchQueue.global(qos: .background).async(execute: workItem!)
该函数填充 C++ 算法中的变量,特别是提供的数据数组。
当用户单击停止按钮时,我通过以下方式停止此线程:
self.workItem?.cancel()
唯一的问题是它没有杀死这个线程并清理内存。我知道这一点,因为当用户再次单击开始按钮时,它会继续使用 C++ 数组中的旧数据
有没有办法杀死这个特定的线程并清理内存,以便用户在每次启动/停止时启动新 session
最佳答案
就 GCD 而言,WorkItem Cancel 只不过相当于 dispatch_block_cancel 。
根据这个类比,已经开始执行的 block 不会停止。只有等待执行的工作项才可能被停止。
停止时,您可能必须手动撤消 WorkItem 实际执行的操作(如果它之前已经执行过)。
关于ios - swift 4 : kill executing thread with called c++ bridge function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50098787/