Как я уже просил в этом посте ссылка и не получил ответа, мне нужно получить событие в точное время, чтобы сфотографировать сцену в QGraphicsview, которая воспроизводит некоторые анимации, чтобы иметь возможность визуализировать это видеофайл с 30 кадрами в секунду, таймер не точный, а также я использовал событие frameChanged в QTimeLine, но оно тоже не точное! Интересно, как я могу отрендерить QGraphicsview в виде mov ie?
для другого решения, я переместил таймер и другой объект с простым слотом в новый поток, он хорошо работает, когда я делаю вещи в слоте объекта в новом потоке, но как только я подключаю сигнал тайм-аута таймера к слоту моего основного потока GUI, снова слот в основном потоке срабатывает поздно и нерегулярно, пока слот в объекте, который находится в новая нить срабатывает в точное время! см
thread = new QThread();
timer = new QTimer();
pp = new PrecisePolling();
timer->setInterval(33);
timer->setTimerType(Qt::PreciseTimer);
QObject::connect(timer, &QTimer::timeout, pp, &PrecisePolling::timeout);
timer->start();
timer->moveToThread(thread);
pp->moveToThread(thread);
thread->start(QThread::Priority::TimeCriticalPriority);
QObject::connect(pp, &PrecisePolling::nowtimeout, this, &MainWindow::timeoutt);
void MainWindow::timeoutt()
{
const std::uint64_t ms = QDateTime::currentMSecsSinceEpoch();
qDebug() << "GUI "<< ms - previousPollingTime;
previousPollingTime = ms;
}
the worker class
void PrecisePolling::timeout()
{
emit nowtimeout();
const std::uint64_t ms = QDateTime::currentMSecsSinceEpoch();
qDebug() << "THR "<< ms - previousPollingTime;
previousPollingTime = ms;
}
выход
THR 32
GUI 32
THR 33
GUI 33
THR 34
GUI 34
THR 32
GUI 32
THR 33
THR 33
THR 33
THR 34
THR 32
GUI 190
GUI 0
GUI 0
GUI 0
GUI 0
THR 34
GUI 9
THR 33