Russian Qt Forum
Ноябрь 22, 2024, 12:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с переменными в Qthread  (Прочитано 5851 раз)
MuLLIKA
Гость
« : Ноябрь 18, 2010, 02:11 »

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

Класс потока
class EraseMemoryThread : public QThread
{
    Q_OBJECT
public:
    void run();
}

Запускаю поток.
EraseMemoryThread er_Thread;
    er_Thread.start();

Вот сдесь указатели на раздел памяти равны нулю (ArrayAdress[0][1] = 0х0)
er_Items = (graphitemclass* )ArrayAdress[0][1];
 er_Parent = (ParentForAllDevices *)ArrayAdress[0][2];


юзаю такой массив extern void *ArrayAdress[0][4];


Зарание спасибо!
Записан
andrew.k
Гость
« Ответ #1 : Ноябрь 18, 2010, 02:16 »

что такое глобальные переменные классов?
память под твои переменные лучше выделять в самом потоке, т.е. внутри метода run()
Записан
MuLLIKA
Гость
« Ответ #2 : Ноябрь 18, 2010, 12:45 »

Я не могу использовать в потоке переменую описанную глобально в самой программе! точнее могу но ее адрес обнуляеться.
Нужно впотоке из внешней переменной(переменная которая не описана в самом потоке) взять значение и произвести какие-либо манипуляции.
Записан
andrew.k
Гость
« Ответ #3 : Ноябрь 18, 2010, 15:26 »

http://www.firststeps.ru/mfc/steps/r.php?339
Все сработает. Новый поток установит переменную. Отсюда вывод, используя глобальные переменные можно передавать и получать информацию от потока. Только объявить ее лучше с ключевым словом volatile. Почему ? Создавая версию Release эту переменную компилятор может поместить скажем в регистр. Он якобы оптимизирует по скорости работы с ней. А для нас это будет проблема.

Слово volatile говорит о том, что мы будем использовать эту переменную разными потоками и требует от компилятора не размещать ее для хранения там, где мы не сможем получить к ней доступ. Ее мы будем менять откуда угодно и мешать нам в этом не надо :-). Поэтому правильное объявление этой переменной будет такое.
Записан
andrew.k
Гость
« Ответ #4 : Ноябрь 18, 2010, 15:29 »

можешь еще показать, как ты объявляешь свою переменную.
Вообщ в кути есть более элегантные способы передачи данных в поток. Более кутишные что ли Улыбающийся
Записан
MuLLIKA
Гость
« Ответ #5 : Ноябрь 19, 2010, 18:44 »

Спасибо volatile помогло! Проблему решил))

А что значит более "кутишные" способы передачи? (значения слова кути)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Ноябрь 20, 2010, 09:52 »

Кути = Qt
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.099 секунд. Запросов: 22.