Как получить доступ к глобальной переменной из рабочего потока - PullRequest
0 голосов
/ 28 августа 2010

У меня есть приложение на основе диалогового окна vc ++ 2005, где я использую рабочий поток, чтобы выполнить некоторую фоновую обработку.

Рабочий поток реализован как глобальная функция в классе диалога

Я могу получить доступ к переменным класса диалога внутри рабочего потока , но я не являюсьв состоянии получить некоторые их значения правильно внутри рабочего потока .

Например, я инициализировал COM-объект (используя CoInitilize) в диалоговом классе, но я не могуполучить доступ к его последнему значению.Я попытался объявить их глобально, но все же не смог получить их значения внутри потока.

Скажите, пожалуйста, как я могу получить доступ к COM-объектам внутри рабочих потоков

Спасибо.

Ответы [ 3 ]

1 голос
/ 28 августа 2010

Функция CoInitialize должна вызываться в каждом потоке, который вы запускаете, если вы хотите использовать какой-либо COM-объект внутри нее.Проверьте документацию MSDN этой функции.Также не забудьте деинициализировать COM перед выходом из потока.

0 голосов
/ 28 августа 2010

Используйте ключевое слово "volatile".Он сообщает компилятору, что переменная определена где-то в «изменчивой» памяти, и что он не должен пытаться оптимизировать эту переменную с помощью регистров.

См. http://msdn.microsoft.com/en-us/library/12a04hfd%28VS.80%29.aspx для объяснения по MSDN.

0 голосов
/ 28 августа 2010

Вам нужно иметь барьеры памяти при доступе к переменным из разных потоков. (И вам также может понадобиться защитить переменные от одновременного доступа.)

Самый простой способ добиться этого (обоих) - использовать любой мьютекс, предоставляемый вашей платформой. Например, Win32 API имеет для этого Критические секции .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...