using mutex to safely delete pendula

main
Benjamin Kraft 1 year ago
parent 2e571ca6d4
commit 2acb74bb44
  1. 14
      src/Simulation.cpp
  2. 2
      src/Simulation.h

@ -15,10 +15,14 @@ Simulation::Simulation() {
};
void Simulation::draw(QPainter *p, int screenSize) {
pendulaMutex.lock();
double scale = screenSize * 0.95 / size;
for (const auto pendulum : pendula)
pendulum->draw(p, scale);
pendulaMutex.unlock();
}
void Simulation::update() {
@ -40,12 +44,14 @@ void Simulation::update() {
}
void Simulation::clearPendula() {
auto deleteLater = pendula;
pendulaMutex.lock();
for (auto p : pendula)
delete p;
pendula.clear();
pendula.shrink_to_fit();
QThread::usleep(500000);
for (auto p : deleteLater)
delete p;
pendulaMutex.unlock();
}
void Simulation::addPendula(const std::vector<Pendulum *> &add) {

@ -2,6 +2,7 @@
#include <cstdint>
#include <QObject>
#include <chrono>
#include <mutex>
using namespace std::chrono;
@ -28,6 +29,7 @@ public slots:
private slots:
void update();
private:
std::mutex pendulaMutex;
QTimer * timer;
int updateInterval = 17;
std::vector<Pendulum *> pendula;

Loading…
Cancel
Save