File indexing completed on 2024-04-21 03:51:15
0001 /*. 0002 SPDX-FileCopyrightText: 2007 Vladimir Kuznetsov <ks.vladimir@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef SIMULATIONTHREAD_H 0008 #define SIMULATIONTHREAD_H 0009 0010 #include <QMutex> 0011 #include <QThread> 0012 #include <QWaitCondition> 0013 0014 namespace StepCore { 0015 class World; 0016 } 0017 0018 /** 0019 * Simulation thread only changes properties of items, 0020 * not their count or addresses, so locking is required for 0021 * - any writes 0022 * - reads of item properties 0023 * 0024 * @author Vladimir Kuznetsov 0025 */ 0026 class SimulationThread: public QThread 0027 { 0028 Q_OBJECT 0029 0030 public: 0031 explicit SimulationThread(StepCore::World** world) 0032 : _world(world), _stopThread(0), _delta(0) {} 0033 ~SimulationThread(); 0034 0035 void run() override; 0036 void doWorldEvolve(double delta); 0037 QMutex* mutex() { return &_mutex; } 0038 0039 signals: 0040 void worldEvolveDone(int result); 0041 0042 protected: 0043 StepCore::World** _world; 0044 bool _stopThread; 0045 double _delta; 0046 QMutex _mutex; 0047 QWaitCondition _waitCondition; 0048 }; 0049 0050 #endif // SIMULATIONTHREAD_H