我有一个基于vc ++ 2005对话框的应用程序,我使用工作线程进行一些后台处理。
工作线程在对话框类
中实现为全局函数我能够访问工作线程中对话框类的变量,但是我无法在工作线程中正确地获取它们的一些值。
例如,我在对话框类中初始化了一个COM对象(使用CoInitilize),但我无法访问其最新值。我尝试在全局范围内声明它们但仍无法在线程中获取它们的值。
请告诉我如何访问工作线程内的COM对象
感谢。
答案 0 :(得分:1)
如果要在其中使用任何COM对象,则必须在启动的每个线程中调用CoInitialize函数。检查此功能的MSDN文档。还请记得在退出线程之前取消初始化COM。
答案 1 :(得分:0)
从不同线程访问变量时,您需要 内存障碍 。 (并且您可能还需要保护变量以防止并发访问。)
实现这两者的最简单方法是使用平台提供的任何类型的互斥锁。例如,Win32 API具有 Critical Sections 。
答案 2 :(得分:0)
使用关键字“volatile”。它告诉编译器变量是在“volatile”内存中定义的,并且它不能尝试通过使用寄存器来优化这个变量。
有关MSDN的说明,请参阅http://msdn.microsoft.com/en-us/library/12a04hfd%28VS.80%29.aspx。