@@ -185,21 +185,6 @@ function MOI.set(model::Optimizer, ::MOI.TimeLimitSec, ::Nothing)
185185 return
186186end
187187
188- function _time_limit_exceeded (model:: Optimizer , start_time:: Float64 )
189- time_limit = MOI. get (model, MOI. TimeLimitSec ())
190- if time_limit === nothing
191- return false
192- end
193- time_remaining = time_limit - (time () - start_time)
194- if time_remaining <= 0
195- return true
196- end
197- if MOI. supports (model. inner, MOI. TimeLimitSec ())
198- MOI. set (model. inner, MOI. TimeLimitSec (), time_remaining)
199- end
200- return false
201- end
202-
203188# ## SolveTimeSec
204189
205190function MOI. get (model:: Optimizer , :: MOI.SolveTimeSec )
604589
605590function _compute_ideal_point (model:: Optimizer , start_time)
606591 for (i, f) in enumerate (MOI. Utilities. eachscalar (model. f))
607- if _time_limit_exceeded (model, start_time)
592+ if _check_premature_termination (model, start_time) != = nothing
608593 return
609594 end
610595 if ! isnan (model. ideal_point[i])
@@ -644,7 +629,39 @@ function optimize_multiobjective!(
644629 return minimize_multiobjective! (algorithm, model)
645630end
646631
632+ function _check_interrupt (f)
633+ try
634+ return reenable_sigint (f)
635+ catch ex
636+ if ! (ex isa InterruptException)
637+ rethrow (ex)
638+ end
639+ return MOI. INTERRUPTED
640+ end
641+ end
642+
643+ function _check_premature_termination (model:: Optimizer , start_time:: Float64 )
644+ return _check_interrupt () do
645+ time_limit = MOI. get (model, MOI. TimeLimitSec ())
646+ if time_limit != = nothing
647+ time_remaining = time_limit - (time () - start_time)
648+ if time_remaining <= 0
649+ return MOI. TIME_LIMIT
650+ end
651+ if MOI. supports (model. inner, MOI. TimeLimitSec ())
652+ MOI. set (model. inner, MOI. TimeLimitSec (), time_remaining)
653+ end
654+ end
655+ return
656+ end
657+ end
658+
647659function MOI. optimize! (model:: Optimizer )
660+ disable_sigint (() -> _optimize! (model))
661+ return
662+ end
663+
664+ function _optimize! (model:: Optimizer )
648665 start_time = time ()
649666 empty! (model. solutions)
650667 model. termination_status = MOI. OPTIMIZE_NOT_CALLED
0 commit comments