对不起,我不能在这里发布专有代码。基本上,它是一个Mac GUI应用程序。这些代码没有被正确地设计为使用异步概念。所有的东西都是在主线程上处理的,不可能在一夜之间改变设计。因此,我不想使用dispatch_async(…(解决方案。
问题的背景是:我有一个在主线程上运行的耗时任务。在处理任务时,我会尝试根据任务的完成百分比(从0%到100%(更新/重新绘制进度条(NSProgressIndicator(。但是,由于任务在主线程上运行,主线程被阻塞,事件队列中的任何更新/重绘事件都必须等待,直到主线程有机会查看它,因此在任务执行过程中根本不会更新/重绘制进度条。
我正在考虑的解决方案是创建另一个处理进度条绘图的应用程序(带有.exe文件(。在主应用程序中,我将创建另一个进程,并让该进程执行另一个应用程序。任务的完成百分比可以通过使用Boost进程间消息队列从主应用程序发送到另一个应用程序。
我希望听到这个解决方案的优点和缺点,所以任何想法都将不胜感激!
您也可以在同一进程中的线程中执行此操作。进程间消息队列仍然可以工作,尽管任何线程安全解决方案都足够了。
一般来说,在进程外运行一些非琐碎的任务是值得的。内核级进程隔离具有线程永远无法拥有的好处:
- 内存空间分离(安全(
- 特权分离(另一个进程可能在不同的安全上下文中运行(
因此,当处理不可信的输入或不可靠的第三方库代码时,您可以获得主进程的稳定性保证。
然而,就你的目的而言,这听起来像是严重的过度杀戮。