2012-08-02 52 views
11

Qt文档说,为什么单线程模型用于将UI更新为主线程?

如上所述,每个程序启动时都有一个线程。此 线程被称为“主线程”(也被称为在 Qt应用程序的“GUI线程”)。 Qt GUI必须在这个线程中运行。

Android的医生说,

类的活动和其他组件,服务主 线程应用程序

和iOS上运行,

强烈建议不要从 后台线程更新UI控件等(例如。计时器,通讯等)。这可能是 崩溃的原因,有时很难识别。相反,使用这些 强制代码在UI线程上执行(这始终是 “主”线程)。

为什么他们使用单线程模型更新UI?

+0

它增加了复杂性,没有任何好处。另见http://stackoverflow.com/questions/5544447/why-are-most-ui-frameworks-single-threaded – 2012-08-02 08:36:41

回答

20

简短的回答是,这是唯一合理的方式,以保证显示器不会被损坏。

长的答复是,允许多个线程更新死锁,竞争条件和各种麻烦的UI效果。这是Java的AWT(其他UI系统)教导的痛苦教训,它允许多个线程触及UI。参见例如this blog post

+0

+ 1的博客文章链接:) – msk 2012-08-02 07:38:45

+3

@MSK - 该文章有一个伟大的谈话的链接约翰Ousterhout事件与线程。不幸的是,这是一个死链接。对于那些有兴趣的人来说,谈话仍然可以在网络上的几个地方找到,包括[这里](http://www.csd.uoc.gr/~hy527/papers/threads-ousterhout.pdf)。 – 2012-08-02 07:48:01

+0

好吧,现在博客贴子本身就是一个死链接。 _:我通过搜索这篇文章的标题中发现的副本[点击这里](http://tecnologia.revistacocktel.com/multithreaded-toolkits-a-failed-dream/)“多线程工具包:一个失败的梦” _ – 2015-12-07 20:43:26