ios - swift 4 : kill executing thread with called c++ bridge function

标签 ios swift multithreading

我有 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/

相关文章:

ios - UINavigationController 右键消失

ios - 'screen' 的 Setter 在 iOS 13.0 中被弃用

java - 工作线程到工作线程通信

ios - 取消订阅主题后仍然收到推送通知 + Firebase

c++ - memory_order_relaxed 如何在智能指针中增加原子引用计数?

java - 守护线程不止一个?

javascript - CamanJS - 移动 - 空白 Canvas

ios - 调整 FormSheet 大小不受影响

ios - iOS NSUrlConnection检查上传速度

ios - 如何在 Xcode 的项目目录中打开 Playground?