crossplatform.ru

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


  Ответ в Как синхронизировать QThread?
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
DIMEDROLL Дата 8.2.2010, 23:55
  в общем как это обычно и бывает, полезно на форуме выкладывать свои мысли - тогда проблему видишь более ясно и решение приходит в голову
в предыдущем посте я, в принципе, дал ответ на свой вопрос, просто реализация у меня была несколько не такая как я описал... сделал так как описал и заработало
потом подвешал Таймер и все работает идеально и быстро
DIMEDROLL Дата 7.2.2010, 21:15
  когда то использовал эту функцию в другом приложении, что то было ужасно некрасиво и она выбросилась из моска как "неправильная", но тут сейчас проверю, спасибо
upd: проверил, в принципе работает, но не так как хотелось бы :)
главное окно сильно тормозит, причиной этому я подозреваю CalculatePositions(), эта функция может занимать 0,5 - 5 секунд и в это время события соответственно не будут обрабатываться
Поэтому вопрос остается актуальным.
Я думал сделать так:
Создать поток class MyThread : public QThread,
run() {
  CalculatePositions();
  mutex.lock();
  SetVertexes();
  mutex.unlock();
}

MyGLWidget::onStartButtonPressed() {
  MyThread *thread = new MyThread();
  tread->start();
}

MyGLWidget()::paintGL {
  mutex.lock()
  calculator_->GetVertexes();
  mutex.unlock();
  RenderVertexes();
}


но что то мьютексы не лочатся правильно, либо я неправильно их использую
Rocky Дата 7.2.2010, 21:06
  А QApplication::processEvents() тут не поможет?
DIMEDROLL Дата 7.2.2010, 21:01
  в общем каша такова:
Пишу на Qt 3.3.8.
Есть класс Считалка, который расчитывает положение 3D точек(вертексов), например:
class MyCalc {
public:
  void CalculatePositions();
  Vertex3D* GetVertexes();
private:
  Vertex3D* vertexes_;
};

CalculatePositions() расчитывает новые положения точек и сохраняет их в массив vertexes_.

Есть класс-виджет MyGLWidget для рендеринга этих точек который унаследован от QGLWidget. И есть главное окно с кнопками, старт и стоп для начала расчетов-рендера и для остановки.

Задача: по кнопке Старт, начать бесконечный цикл CalculatePositions(); GetVertexes(); RenderVertexes();
при этом кнопка Стоп должна оставаться активной, тоесть что бы пользователь мог ее нажать и бесконечный цикл остановился.

Как это правильно сделать?
если я в теле MyGLWidget::onStartButtonPressed() это сделаю, то все зависнет и будет бесконечно рендерится.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 12:01