2010-08-28 2 views
0

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

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

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

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

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

Спасибо.

ответ

1

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

0

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

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

0

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

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

Смежные вопросы