git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1886 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Prolog
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Prolog
		
	
	
	
	
	
/*************************************************************************
 | 
						|
*									 *
 | 
						|
*	 YAP Prolog 							 *
 | 
						|
*									 *
 | 
						|
*	Yap Prolog was developed at NCCUP - Universidade do Porto	 *
 | 
						|
*									 *
 | 
						|
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997	 *
 | 
						|
*									 *
 | 
						|
**************************************************************************
 | 
						|
*									 *
 | 
						|
* File:		timeout.yap						 *
 | 
						|
* Last rev:	5/12/99							 *
 | 
						|
* mods:									 *
 | 
						|
* comments:	Goal within timeout					 *
 | 
						|
*									 *
 | 
						|
*************************************************************************/
 | 
						|
 | 
						|
:- module(timeout, [
 | 
						|
	time_out/3
 | 
						|
    ]).
 | 
						|
 | 
						|
:- meta_predicate time_out(:,+,-).
 | 
						|
 | 
						|
%
 | 
						|
% not the nicest program I've ever seen.
 | 
						|
%
 | 
						|
time_out(Goal, Time, Result) :-
 | 
						|
	T is Time//1000,
 | 
						|
	UT is (Time mod 1000)*1000,
 | 
						|
	% enable alarm
 | 
						|
	alarm(T.UT,throw(time_out),_),
 | 
						|
	% launch goal and wait for signal
 | 
						|
	( catch(Goal, time_out, Result = time_out)
 | 
						|
        % make sure to disable alarm
 | 
						|
          ->
 | 
						|
	    alarm(0,_,_)
 | 
						|
	  ;
 | 
						|
	    alarm(0,_,_),
 | 
						|
	    fail
 | 
						|
	),
 | 
						|
	% just couldn't resist...
 | 
						|
	(Result = success -> true ; true).
 | 
						|
 |