线程上下文切换

Alo*_*ave 3 c c++ multithreading pthreads

我正在开发一个涉及UI和后台服务的C/C++项目,它通过网络获取数据来进行一些繁重的处理.为了使我的UI不会无响应,我想生成一个单独的线程,然后在该线程中调用后台服务,而另一个线程将在UI中显示忙碌指示.一旦后台服务完成了它的工作,我就想将线程上下文从后台线程切换到UI线程,这样就可以删除忙碌指示并显示更多的屏幕流.我相信这是大多数UI工作的常用方式.我想知道的是实现这一目标的有效和最佳方法是什么.现在我没有为上面实现的代码,我只是在寻求想法和最佳方法.

该平台是Linux.我正在使用的UI框架是一个自定义UI框架,它提供了一个用于UI开发的SDK,但与大多数UI框架不同,它不会为我提到的场景提供任何内容.它几乎已经被弃用了,但需要用于这个项目,这是一个痛苦,所以唯一的选择是我可以使用Pthread或System v与实际调用的一些包装器,这将有助于我将实现在不同平台上保持可移植性.

由于嵌入式环境的某些限制,我无法使用Boost Threads.
关于如何进行上下文切换的任何建议和解释都将非常有用.

zvr*_*rba 6

首先,您对线程如何工作感到困惑.您不能随意切换线程上下文,操作系统会在任何时候都这样做.

其次,如果您的担忧是上下文切换开销,那么您正在做一些非常错误的事情.

最后,UI通常具有事件驱动的体系结构.通常,您有一个"主"线程运行一个事件循环来处理各种事件.因此,执行所需操作的正确方法是让后台线程将进度事件发布到"主"线程.而且你必须以线程安全的方式做到这一点; 具体细节取决于UI工具包.