/* * Copyright © 2010 by Ondrej Skalicka. All Rights Reserved */ package cz.cvut.felk.cig.jcop.solver.condition; import cz.cvut.felk.cig.jcop.solver.message.Message; import cz.cvut.felk.cig.jcop.solver.message.MessageSolverStart; import cz.cvut.felk.cig.jcop.util.PreciseTime; /** * Limits solver to run for certain amount of CPU time. * * @author Ondrej Skalicka * @see cz.cvut.felk.cig.jcop.util.PreciseTime#getCpuTimeMili() utility to measure time used in this condition. */ public class TimeoutCondition extends BaseCondition { /** * When solver started. */ protected long cpuTimeStart = 0; /** * How long (ms) to allow solver to run. */ protected long timeout; /** * Creates new TimeoutCondition with given timeout in ms. * * @param timeout timeout in miliseconds */ public TimeoutCondition(long timeout) { this.timeout = timeout; } @Override public void onMessage(Message message) { if (message instanceof MessageSolverStart) this.cpuTimeStart = PreciseTime.getCpuTimeMili(); } public boolean isConditionMet() { return (PreciseTime.getCpuTimeMili() > this.cpuTimeStart + this.timeout); } }