#include "../headers/cpu.h" void cpu::start() { if (running) return; running = true; nitUre = std::thread(&cpu::zankaUre, this); } void cpu::stop() { running = false; if (nitUre.joinable()) nitUre.join(); } bool cpu::isRunning() { return running.load(); } int cpu::getSpeed() { return hitrostKhz; } void cpu::setSpeed(int speedKhz) { if (speedKhz < 1) speedKhz = 1; hitrostKhz = speedKhz; } void cpu::zankaUre() { while (running) { // 1. Izvedemo določeno št. ukazov na tick for (int i = 0; i < operacijeNaTick; i++) { cpu::m->execute(); } // 2. Izračunamo kolikokrat mora "tikati" na sekundo // speed_kHz = n tisoč ukazov / sekundo // operacijeNaTick = koliko ukazov na en tik // ticksPerSecond = (hitrostKhz * 1000) / operacijeNaTick double ticksPerSecond = (hitrostKhz * 1000.0) / operacijeNaTick; double sleepTimeSec = 1.0 / ticksPerSecond; // 3. Ustavimo nit za izračunani čas std::this_thread::sleep_for(std::chrono::duration(sleepTimeSec)); } }