Название: Проблема с переменными в Qthread Отправлено: 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]; Зарание спасибо! Название: Re: Проблема с переменными в Qthread Отправлено: andrew.k от Ноябрь 18, 2010, 02:16 что такое глобальные переменные классов?
память под твои переменные лучше выделять в самом потоке, т.е. внутри метода run() Название: Re: Проблема с переменными в Qthread Отправлено: MuLLIKA от Ноябрь 18, 2010, 12:45 Я не могу использовать в потоке переменую описанную глобально в самой программе! точнее могу но ее адрес обнуляеться.
Нужно впотоке из внешней переменной(переменная которая не описана в самом потоке) взять значение и произвести какие-либо манипуляции. Название: Re: Проблема с переменными в Qthread Отправлено: andrew.k от Ноябрь 18, 2010, 15:26 http://www.firststeps.ru/mfc/steps/r.php?339
Все сработает. Новый поток установит переменную. Отсюда вывод, используя глобальные переменные можно передавать и получать информацию от потока. Только объявить ее лучше с ключевым словом volatile. Почему ? Создавая версию Release эту переменную компилятор может поместить скажем в регистр. Он якобы оптимизирует по скорости работы с ней. А для нас это будет проблема. Слово volatile говорит о том, что мы будем использовать эту переменную разными потоками и требует от компилятора не размещать ее для хранения там, где мы не сможем получить к ней доступ. Ее мы будем менять откуда угодно и мешать нам в этом не надо :-). Поэтому правильное объявление этой переменной будет такое. Название: Re: Проблема с переменными в Qthread Отправлено: andrew.k от Ноябрь 18, 2010, 15:29 можешь еще показать, как ты объявляешь свою переменную.
Вообщ в кути есть более элегантные способы передачи данных в поток. Более кутишные что ли :) Название: Re: Проблема с переменными в Qthread Отправлено: MuLLIKA от Ноябрь 19, 2010, 18:44 Спасибо volatile помогло! Проблему решил))
А что значит более "кутишные" способы передачи? (значения слова кути) Название: Re: Проблема с переменными в Qthread Отправлено: Пантер от Ноябрь 20, 2010, 09:52 Кути = Qt
|