spo/ass2/simulator/executor.cpp
2025-12-11 07:02:47 +01:00

76 lines
1.5 KiB
C++

#include "executor.h"
#include "machine.h"
#include<chrono>
#include<thread>
#include <QCoreApplication>
Executor::Executor() {}
Executor::Executor(Machine* m) {
machine = m;
}
void Executor::start() {
if (ended) {
emit signalEnded();
return;
}
running = true;
emit signalStarted();
while (running && !ended) {
int pc_before = machine->getPC();
machine->execute();
int pc_after = machine->getPC();
emit updateRequested(); // signal za posodobitev UI
if (pc_before == pc_after) {
ended = true;
emit signalEnded();
break;
}
std::this_thread::sleep_for(std::chrono::milliseconds(500));
QCoreApplication::processEvents();
}
}
void Executor::stop() {
running = false;
emit signalStopped();
emit updateRequested();
}
bool Executor::isRunning() {
return running;
}
bool Executor::hasEnded() {
return ended;
}
void Executor::resetProgram() {
ended = false;
running = false;
emit signalStopped();
}
void Executor::step() {
if (ended) {
emit signalEnded();
return;
}
emit signalStarted();
int pc_before = machine->getPC();
machine->execute();
int pc_after = machine->getPC();
emit updateRequested();
std::this_thread::sleep_for(std::chrono::milliseconds(100));
emit signalStopped();
std::this_thread::sleep_for(std::chrono::milliseconds(100));
if (pc_after == pc_before) {
ended = true;
emit signalEnded();
}
}