我有一个基于vC++ 2005的基于对话框的应用程序,我使用工作线程来做一些后台处理。如何从工作线程访问全局变量
工作者线程实现为对话框类
我能够访问工作线程里面的对话框类的变量是全局函数,但我不能够得到一些他们自己的价值观正确工作线程内。
例如,我在对话框类中初始化了一个COM对象(使用CoInitilize),但我无法访问它的最新值。我试图在全局声明它们,但仍然无法在线程中获取它们的值。
请告诉我如何访问工作线程内的COM对象
谢谢。
我有一个基于vC++ 2005的基于对话框的应用程序,我使用工作线程来做一些后台处理。如何从工作线程访问全局变量
工作者线程实现为对话框类
我能够访问工作线程里面的对话框类的变量是全局函数,但我不能够得到一些他们自己的价值观正确工作线程内。
例如,我在对话框类中初始化了一个COM对象(使用CoInitilize),但我无法访问它的最新值。我试图在全局声明它们,但仍然无法在线程中获取它们的值。
请告诉我如何访问工作线程内的COM对象
谢谢。
如果您想使用其中的任何COM对象,则必须在您启动的每个线程中调用CoInitialize函数。检查此功能的MSDN文档。请务必在退出线程之前取消初始化COM。
您需要有内存障碍访问来自不同线程的变量时。 (并且您可能还需要保护变量不受并发访问的影响。)
实现(两者)最简单的方法是使用您的平台提供的任何种类的互斥锁。例如,对于此,Win32 API有关键部分。
使用关键字“volatile”。它告诉编译器该变量是在'volatile'内存中定义的,并且它不能试图通过使用寄存器来优化这个变量。
有关MSDN的解释,请参阅http://msdn.microsoft.com/en-us/library/12a04hfd%28VS.80%29.aspx。