首次提交
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
#include "Global.h"
|
||||
#include <QApplication>
|
||||
#include "Plot_p.h"
|
||||
|
||||
namespace YSG {
|
||||
|
||||
TimerThread::TimerThread() {
|
||||
connect(QApplication::instance(), &QApplication::aboutToQuit, [&]() {
|
||||
if (isRunning()) {
|
||||
quit();
|
||||
wait();
|
||||
}
|
||||
delete this;
|
||||
});
|
||||
}
|
||||
|
||||
void TimerThread::run() {
|
||||
for (auto &plot: mPlots) {
|
||||
plot->d->mTimer = new QTimer;
|
||||
plot->d->mTimer->setTimerType(Qt::PreciseTimer);
|
||||
plot->d->mTimerThread = this;
|
||||
connect(plot->d->mTimer, &QTimer::timeout, plot, &Plot::render, Qt::DirectConnection);
|
||||
// show里的调用可能比这个 线程开启提前, 那是 timer是nullptr
|
||||
if (plot->isVisible()) plot->startRender();
|
||||
}
|
||||
exec();
|
||||
for (auto &plot: mPlots) {
|
||||
plot->d->mTimer->stop();
|
||||
delete plot->d->mTimer;
|
||||
}
|
||||
}
|
||||
|
||||
void Global::startAllTimeThread() {
|
||||
for (auto &thread: mTimerThreadMap) {
|
||||
//qDebug() << "startAllTimeThread == " << thread->objectName();
|
||||
thread->start();
|
||||
}
|
||||
mTimerId = startTimer(10);
|
||||
}
|
||||
|
||||
void Global::timerEvent(QTimerEvent* event) {
|
||||
if (event->timerId() != mTimerId) return;
|
||||
for (TimerThread *t: mTimerThreadMap) {
|
||||
for (Plot *plot: t->mPlots) {
|
||||
if (plot->d->mPlotState.loadAcquire() != PlotPrivate::PlotState::NeedToPaint) continue;
|
||||
plot->repaint();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user