objective-c - 为 UI 的一部分创建另一个流程是个好主意吗?
问题描述
抱歉,我不能在这里发布专有代码。基本上,它是一个 Mac GUI 应用程序。这些代码没有正确设计以利用异步概念。一切都在主线程上处理,不可能一夜之间改变设计。因此,我不想使用dispatch_async(...)解决方案。
问题的上下文是:我有一个在主线程上运行的耗时任务。在处理任务时,我尝试根据任务的完成百分比(从 0% 到 100%)更新/重绘进度条(NSProgressIndicator)。但是,因为任务运行在主线程上,所以主线程被阻塞了,事件队列中的任何更新/重绘事件都要等到主线程有机会看到,所以进度条没有更新/在任务执行期间完全重绘。
我正在考虑的解决方案是创建另一个处理进度条绘图的应用程序(带有 .exe 文件)。在主应用程序中,我将创建另一个进程并让该进程执行另一个应用程序。可以使用Boost 进程间消息队列将任务的完成百分比从主应用程序发送到其他应用程序。
我希望听到这个解决方案的优点和缺点,所以任何想法都将不胜感激!
解决方案
您也可以从同一进程中的线程执行此操作。进程间消息队列仍然有效,尽管任何线程安全的解决方案都足够了。
一般来说,在进程外运行一些重要的任务是值得的。内核级进程隔离具有线程永远无法拥有的好处:
- 内存空间分离(安全)
- 权限分离(其他进程可能在不同的安全上下文中运行)
因此,在处理不受信任的输入或不可靠的第三方库代码时,您可以获得主进程的稳定性保证。
但是,出于您的目的,这听起来像是严重的矫枉过正。
推荐阅读
- javascript - 如何在 Javascript 循环中每 N 次迭代休眠一次?
- python - 如何清除使用 Keras 和 Tensorflow(作为后端)创建的模型?
- latex - 如何在简历中将对象放在中上
- f# - 指定要包含在 nupkg 中的依赖项
- swift - 使用 segue 将数据从模型移动到目标 ViewController
- javascript - 如何使用 d3 或常规 javascript 标记一个特定的散点(不是所有点)?
- regex - Perl MongoDB API - 过滤器中的正则表达式
- angular - Angular组件如何嵌套无序列表
- 段内
?
- ios - 使用 evaluateJavascript 从 WKWebView 获取 HTML,然后将其存储在变量中(使用 Swift)
- git - 我应该关注我的 git 日志上的未知作者吗?