2014-06-13 111 views
1

我正在嘗試在5000毫秒後在屏幕上打印某些內容。 我正在使用此代碼,5分鐘後,Prolog關閉。 我有這樣的代碼進行編譯:如何在SWI-Prolog上設置鬧鐘?

:- use_module(library(time)). 

alarm:- 
    alarm(5, writeln(ouch), Id, [remove(true)]). 
+0

它適用於我。 –

+0

您正在使用哪種SWI-Prolog版本? –

+0

我正在使用6.6.6版本 –

回答

2

報警機制通過發送一個信號(參見thread_signal/2)。如果Prolog很好地執行目標,信號只能被可靠地捕獲。一些長期運行的外國目標顯式查詢未決信號。一些阻止目標也可以處理它們,但這取決於操作系統。

更可靠的處理時間的方法是使用線程。例如:

?- thread_create((sleep(5), writeln(ouch)), _, [detached(true)]). 
true. 

?- outch 

或者,您必須確保發出警報的線程處於可以接收信號的狀態。頂層不是(在所有平臺上)。 AFAIK,sleep/1是。所以,你可以確保線程正在運行(例如):

sleep :- sleep(1000), sleep.