如何从工作线程访问全局变量

时间:2010-08-28 14:57:35

标签: multithreading visual-c++ mfc

我有一个基于vc ++ 2005对话框的应用程序,我使用工作线程进行一些后台处理。

工作线程在对话框类

中实现为全局函数

我能够访问工作线程中对话框类的变量,但是我无法在工作线程中正确地获取它们的一些值

例如,我在对话框类中初始化了一个COM对象(使用CoInitilize),但我无法访问其最新值。我尝试在全局范围内声明它们但仍无法在线程中获取它们的值。

请告诉我如何访问工作线程内的COM对象

感谢。

3 个答案:

答案 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