MFC应用程序多线程混合显示界面方法研究
2014-12-16袁野
袁野
摘要:该文通过分析与研究MFC内部关键数据结构,并结合Windows操作系统UI工作原理,提出了如何解决应用程序在多线程环境下界面的显示与更新。
关键词:MFC;线程局部存储;TLS;线程状态;模块状态;模块-线程状态;窗口句柄映射表
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)32-7630-02
1 多UI线程显示工具条的问题与解决
在多线程显示UI中普遍存在的问题是从当前线程的模块-线程状态的永久句柄表或临时句柄表中无法查找到另一个线程对应窗口句柄的MFC窗口类对象,而MFC类库和第三方界面库的界面更新逻辑对具有父子关系的窗口均假设为在同一线程进行,因此当从主框架开始进行消息传递来更新界面时,如果某一窗口句柄在当前线程的永久句柄表中查找不到MFC窗口对象时,更新消息不会传递给该窗口,从而造成界面的局部未被更新。
解决此问题的方法是将主线程的模块-线程状态中的句柄表拷贝到子线程的模块-线程状态中的句柄表中。下面以在子线程中弹出一个工具条为例子加以说明,在线程中弹出一个工具条的代码如下:
以上代码是将主线程的线程-模块状态中的句柄表拷贝到子线程的线程-模块状态中的句柄表时能正确弹出工具条的样例代码。
参考文献:
[1] Charles Petzold.Windows程序设计[M]. 5版.北京:北京大学出版社,1999.
[2] George Shepherd,Scot Wingo.深入解析MFC[M]. 赵剑去,卿瑾,译.北京:中国电力出版社,2003.
[3] 候捷. 深入浅出MFC[M].武汉:华中科技大学出版社,2001.
[4] 李久进.MFC深入浅出[M].武汉:华中科技大学出版社,1999.
[5] Jeffrey Richter .Windows 核心编程[M].王建华,张焕生,侯丽坤,译.北京:机械工业出版社,2000.
摘要:该文通过分析与研究MFC内部关键数据结构,并结合Windows操作系统UI工作原理,提出了如何解决应用程序在多线程环境下界面的显示与更新。
关键词:MFC;线程局部存储;TLS;线程状态;模块状态;模块-线程状态;窗口句柄映射表
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)32-7630-02
1 多UI线程显示工具条的问题与解决
在多线程显示UI中普遍存在的问题是从当前线程的模块-线程状态的永久句柄表或临时句柄表中无法查找到另一个线程对应窗口句柄的MFC窗口类对象,而MFC类库和第三方界面库的界面更新逻辑对具有父子关系的窗口均假设为在同一线程进行,因此当从主框架开始进行消息传递来更新界面时,如果某一窗口句柄在当前线程的永久句柄表中查找不到MFC窗口对象时,更新消息不会传递给该窗口,从而造成界面的局部未被更新。
解决此问题的方法是将主线程的模块-线程状态中的句柄表拷贝到子线程的模块-线程状态中的句柄表中。下面以在子线程中弹出一个工具条为例子加以说明,在线程中弹出一个工具条的代码如下:
以上代码是将主线程的线程-模块状态中的句柄表拷贝到子线程的线程-模块状态中的句柄表时能正确弹出工具条的样例代码。
参考文献:
[1] Charles Petzold.Windows程序设计[M]. 5版.北京:北京大学出版社,1999.
[2] George Shepherd,Scot Wingo.深入解析MFC[M]. 赵剑去,卿瑾,译.北京:中国电力出版社,2003.
[3] 候捷. 深入浅出MFC[M].武汉:华中科技大学出版社,2001.
[4] 李久进.MFC深入浅出[M].武汉:华中科技大学出版社,1999.
[5] Jeffrey Richter .Windows 核心编程[M].王建华,张焕生,侯丽坤,译.北京:机械工业出版社,2000.
摘要:该文通过分析与研究MFC内部关键数据结构,并结合Windows操作系统UI工作原理,提出了如何解决应用程序在多线程环境下界面的显示与更新。
关键词:MFC;线程局部存储;TLS;线程状态;模块状态;模块-线程状态;窗口句柄映射表
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)32-7630-02
1 多UI线程显示工具条的问题与解决
在多线程显示UI中普遍存在的问题是从当前线程的模块-线程状态的永久句柄表或临时句柄表中无法查找到另一个线程对应窗口句柄的MFC窗口类对象,而MFC类库和第三方界面库的界面更新逻辑对具有父子关系的窗口均假设为在同一线程进行,因此当从主框架开始进行消息传递来更新界面时,如果某一窗口句柄在当前线程的永久句柄表中查找不到MFC窗口对象时,更新消息不会传递给该窗口,从而造成界面的局部未被更新。
解决此问题的方法是将主线程的模块-线程状态中的句柄表拷贝到子线程的模块-线程状态中的句柄表中。下面以在子线程中弹出一个工具条为例子加以说明,在线程中弹出一个工具条的代码如下:
以上代码是将主线程的线程-模块状态中的句柄表拷贝到子线程的线程-模块状态中的句柄表时能正确弹出工具条的样例代码。
参考文献:
[1] Charles Petzold.Windows程序设计[M]. 5版.北京:北京大学出版社,1999.
[2] George Shepherd,Scot Wingo.深入解析MFC[M]. 赵剑去,卿瑾,译.北京:中国电力出版社,2003.
[3] 候捷. 深入浅出MFC[M].武汉:华中科技大学出版社,2001.
[4] 李久进.MFC深入浅出[M].武汉:华中科技大学出版社,1999.
[5] Jeffrey Richter .Windows 核心编程[M].王建华,张焕生,侯丽坤,译.北京:机械工业出版社,2000.