LINUX.ORG.RU

Привязать QTimer к потоку визуализации QtQuick

 


0

2

Привет, суть такова. Имеем Qt5 и QtQuick2. Есть класс унаследованный от QQuickView. Нужно как-то запустить таймер, который бы периодически вызывал юзерский слот из потока рендера, чтобы был доступ к OpenGL контексту.

Если создавать таймер в конструкторе, то всё будет работать, но таймер будет вызываться из этого же потока.

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(updateGL()), Qt::DirectConnection);
timer->start(16);

Если создавать таймер при возникновении сигнала sceneGraphInitialized, то таймер будет вызываться из нужного потока, но только если что-то делать с окном (менять размер например).

QTimer *timer = new QTimer(nullptr);
connect(timer, SIGNAL(timeout()), this, SLOT(updateGL()), Qt::DirectConnection);
timer->setInterval(16);
timer->setSingleShot(false);
timer->moveToThread(QThread::currentThread());
timer->start();

Вероятно я делаю что-то не так? Как будет правильно? Вариант с постоянным дерганьем makeCurrent контекста из разных потоков не очень.

Я в недоумении. Чем тебе не подошел самый простой вариант - создать таймер в конструкторе и прикрепить его к нужному потоку?

wolph ★★
()
Ответ на: комментарий от wolph

Потока еще нету либо я не знаю как его достать в конструкторе. По моему он создается позже, после QGuiApplication::exec().

oh-la-la
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.