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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Рисование карандаша, прерывистые линии  (Прочитано 12674 раз)
twp
Гость
« Ответ #15 : Ноябрь 21, 2012, 17:49 »

Код:
class PenGraphItem : public AbstractGraphItem
{
  blablabla

  private:
     QList<QPoint> *m_lstBuff;  // создается в конструкторе
     bool *m_stopThreadBuff; // создается в конструкторе
};
А в чем кармический смысл использования указателей?
Или это произошло из-за усечения настоящего кода программы?
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #16 : Ноябрь 22, 2012, 08:53 »

Уберите указатели и взгляните на код Улыбающийся Станет сразу ясно что значения я не получу, более того даже не смогу остановить тред  Улыбающийся Я думал это очивидно Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #17 : Ноябрь 22, 2012, 09:25 »

Уберите указатели и взгляните на код Улыбающийся Станет сразу ясно что значения я не получу, более того даже не смогу остановить тред  Улыбающийся Я думал это очивидно Улыбающийся
Мне лично не очень Улыбающийся Почему значения не получить и даже не остановить  Непонимающий
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #18 : Ноябрь 22, 2012, 10:00 »

ок, вот допустим я передаю в ф-цию pCreateBufferPoint не указатель на список, а просто копированием, что получится ? Получится что внутри треда список то заполнится, но в ф-ции mouseMoveEvent список будет пустой, опять же из за копирования, тоже и с m_stopThreadBuff изменять смогу его сколько угодно, но на тред это никак не повлияет. Может вы хотите предложить другой вариант ? Улыбающийся Я просто не совсем понимаю.
Записан
_OLEGator_
Гость
« Ответ #19 : Ноябрь 22, 2012, 10:03 »

Другой вариант - передача не по указателю, а по ссылке.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #20 : Ноябрь 22, 2012, 10:08 »

Можно по ссылке, можно и по указателю
Код
C++ (Qt)
QtConcurrent::run(pCreateBufferPoint, &m_bufferPoint, &m_stopThreadBuff);
 
Объявлять-то члены указателями необязательно, хотя это - дело вкуса
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #21 : Ноябрь 22, 2012, 10:30 »

А, ну если вопрос стоял следующим образом :"Почему указатели ,а не ссылки?". То тут не скажу почему так Улыбающийся Указатели первые в голову пришли.
Записан
twp
Гость
« Ответ #22 : Ноябрь 22, 2012, 13:56 »

Уберите указатели и взгляните на код Улыбающийся Станет сразу ясно что значения я не получу, более того даже не смогу остановить тред  Улыбающийся Я думал это очивидно Улыбающийся
Я понял, что для pCreateBufferPoint необходимо передавать или указатели или ссылки, но вот зачем объявлять члены класса как указатели? Тогда, по идее, в конструкторе нужно выделять память для этих переменных, а потом удалять в деструкторе (что как по мне не имеет смысла).
И на счет потокобезопасности. В pCreateBufferPoint используется локальный экземпляр QMutex, что никак не защитит от возможных проблем. По идее нужно локировать один и тот же экземпляр QMutex в pCreateBufferPoint() и в mouseMoveEvent().
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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