最近做了一个小项目,需要集成多个ActiveX (Web Browser)控件,每个Web Browser控件使用QAxWidget封装,每个QAxWidget都属于同一个QTabWidget,方便切换。
发现当多个Web Browser同时加载页面或处理复杂JS时,整个界面都会卡住,简单分析了一下:应该是所有的处理都在同一个线程(主线程)中,导致事件循环被阻塞造成的。
自己尝试使用多线程来控制GUI,发现只要是非主线程对GUI进行更新等操作,程序就会报错;于是想到Google Chrome的多进程架构——关键是如何让不同的进程可以处理同一个窗体或控件?网上搜到一个老外在Linux下面用Webkit、D-Bus和XEmbed实现了
process-per-tab browser。
另外,从
Google Chromium的官网得知,现在的多线程架构仍然不能充分利用多核处理器的优势,同一进程的所有线程还是只能排队在某个核心上运行。
请教大家有没有这方面的经验?如何在Windows下实现多进程、多线程的GUI的控制(绘制)?谢谢!