Browse Source

player update optimized

lakebane-reset
FatBoy-DOTC 6 days ago
parent
commit
d2d236aa93
  1. 49
      src/engine/workthreads/UpdateThread.java

49
src/engine/workthreads/UpdateThread.java

@ -17,6 +17,8 @@ import engine.objects.PlayerCharacter; @@ -17,6 +17,8 @@ import engine.objects.PlayerCharacter;
import engine.objects.PlayerCombatStats;
import org.pmw.tinylog.Logger;
import java.util.concurrent.*;
public class UpdateThread implements Runnable {
private volatile Long lastRun;
@ -27,36 +29,45 @@ public class UpdateThread implements Runnable { @@ -27,36 +29,45 @@ public class UpdateThread implements Runnable {
}
private static final long INSTANCE_DELAY = 1500; // Adjust as needed
public void processPlayerUpdate() {
ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
try {
for(PlayerCharacter player : SessionManager.getAllActivePlayerCharacters()){
for (PlayerCharacter player : SessionManager.getAllActivePlayerCharacters()) {
if (player != null) {
player.update(true);
Future<?> future = executor.submit(() -> {
try {
player.update(true);
} catch (Exception e) {
Logger.error(e);
}
});
try {
future.get(10, TimeUnit.SECONDS); // Enforce max execution time
} catch (TimeoutException e) {
Logger.error("Player update timed out for: " + player.getName());
future.cancel(true); // Attempt to cancel the task
} catch (Exception e) {
Logger.error(e);
}
}
}
} catch (Exception e) {
Logger.error("UPDATE ERROR",e);
Logger.error("UPDATE ERROR", e);
} finally {
executor.shutdown();
}
}
@Override
public void run() {
lastRun = System.currentTimeMillis();
while (true) {
if (System.currentTimeMillis() >= lastRun + instancedelay) { // Correct condition
this.processPlayerUpdate();
lastRun = System.currentTimeMillis(); // Update lastRun after processing
}else {
try {
Thread.sleep(1500); // Pause for 1500ms to reduce CPU usage
} catch (InterruptedException e) {
Logger.error("Thread interrupted", e);
Thread.currentThread().interrupt();
}
}
Thread.yield();
try {
processPlayerUpdate();
} catch (Exception e) {
Logger.error("Thread Execution Error", e);
}
}

Loading…
Cancel
Save