【问题标题】:How to access a global variable from a worker thread如何从工作线程访问全局变量
【发布时间】:2010-08-28 14:57:34
【问题描述】:

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

工作线程在对话框类中实现为全局函数

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

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

请告诉我如何在工作线程中访问 COM 对象

谢谢。

【问题讨论】:

    标签: multithreading visual-c++ mfc


    【解决方案1】:

    如果要在其中使用任何 COM 对象,则必须在启动的每个线程中调用 CoInitialize 函数。检查此功能的 MSDN 文档。还请记住在退出线程之前取消初始化 COM。

    【讨论】:

      【解决方案2】:

      从不同线程访问变量时,您需要有内存屏障。 (而且您可能还需要保护变量免受并发访问。)

      实现这一点(两者)的最简单方法是使用您的平台提供的任何类型的互斥锁。例如,Win32 API 对此有关键部分

      【讨论】:

        【解决方案3】:

        使用关键字“volatile”。它告诉编译器该变量是在“易失性”内存中的某处定义的,并且它不能尝试通过使用寄存器来优化该变量。

        有关 MSDN 上的说明,请参阅 http://msdn.microsoft.com/en-us/library/12a04hfd%28VS.80%29.aspx

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-26
          • 2021-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多