crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Рисование линий и память
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Алексей1153 Дата 9.7.2011, 15:30
  RazrFalcon, контейнеры Qt имеют похожий интерфейс

суть в том, чтобы перед добавлением обеспечить такой размер контейнера, чтобы после добавления размер не стал больше заданной величины
RazrFalcon Дата 9.7.2011, 13:07
  Я STL не знаю. <_<
Алексей1153 Дата 8.7.2011, 6:21
 
Цитата
Так как прога будет обновлять значения не чаще чем раз в пару секунд, а не каждые 100мс как сейчас, то думаю проблем не будет.


будут, поверь :)

А всего то нужно сделать следующее: (я названия методов QList не помню, сделаю аналогию на STL)

class MyLineShot
{
   std::vector<QLineF> m_vec;
   enum{e_max_size=1000;}//>1

   public:
   MyLineShot();
   void Append(const QLineF& l);
};

MyLineShot::MyLineShot()
{
   m_vec.reserve(e_max_size);
}

void MyLineShot::Append(const QLineF& l)
{
   межпоточный_синхронизатор.lock();  

   if( m_vec.size()>(e_max_size-1) )
   {
      const int to_del=m_vec.size()-(e_max_size-1);
      m_vec.erase(m_vec.begin(), m_vec.begin()+to_del);
   }

   m_vec.push_back(l);


   межпоточный_синхронизатор.unlock();  
}
RazrFalcon Дата 7.7.2011, 23:27
  Да, я тоже думал про "скользящее окно", просто реализация будет по сложнее.
Но данные то все равно хранятся в БД, так что должно быть норм.

Цитата
выведи в консоль значение linesList.size() и понаблюдай
Угу, уже понял свою "ошибку".
Так как прога будет обновлять значения не чаще чем раз в пару секунд, а не каждые 100мс как сейчас, то думаю проблем не будет.
mks Дата 7.7.2011, 21:39
  RazrFalcon ты по всей видимости отслеживаеш какой то длительный процесс и строишь его график. Твоя программа должна накапливать длительную статистику этого процесса (несколько суток или месяцев). Если я всё правильно понял, тогда в памяти в виде линий надо сохранять небольшой кусок этого графика, при поступлении новых данных старые удалять (можно сохранять на жёсткий диск) а новые добавлять, работать скользящим окном.
Алексей1153 Дата 7.7.2011, 21:26
  RazrFalcon, выведи в консоль значение linesList.size() и понаблюдай
Litkevich Yuriy Дата 7.7.2011, 20:31
 
Цитата(RazrFalcon @ 7.7.2011, 22:20) *
Через 10 мин съело 20 метров.
ну и что, ты в коде нигде линии не удаляешь, только добавляешь и всё.
RazrFalcon Дата 7.7.2011, 20:11
  <_<
Какая очистка?
Мне же нужен "лист"...
Или вы имеете ввиду "QLineF(x1,y1,x2,y2)", тогда я не знаю как его удалить =/
Алексей1153 Дата 7.7.2011, 19:28
  ладно. Тогда так:

linesList.append(QLineF(x1,y1,x2,y2));

а где очистка ? всегда только наполнение :)
RazrFalcon Дата 7.7.2011, 19:20
 
Цитата(Litkevich Yuriy @ 7.7.2011, 18:54) *
Цитата(RazrFalcon @ 7.7.2011, 21:14) *
Точнее, как сделать так, что бы избавится от утечки памяти.
а почему ты решил, что есть утечка?

Через 10 мин съело 20 метров. Прога будет работать круглосуточно, и графиков будет 8-м...


Цитата
А вообще, тут тебе нужен контейнер типа
QList<QLineF>

Самый первый код первого сообщения...
Та же беда.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 2:07