Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: MuLLIKA от Ноябрь 18, 2010, 02:11



Название: Проблема с переменными в 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