1
我正在嘗試在5000毫秒後在屏幕上打印某些內容。 我正在使用此代碼,5分鐘後,Prolog關閉。 我有這樣的代碼進行編譯:如何在SWI-Prolog上設置鬧鐘?
:- use_module(library(time)).
alarm:-
alarm(5, writeln(ouch), Id, [remove(true)]).
我正在嘗試在5000毫秒後在屏幕上打印某些內容。 我正在使用此代碼,5分鐘後,Prolog關閉。 我有這樣的代碼進行編譯:如何在SWI-Prolog上設置鬧鐘?
:- use_module(library(time)).
alarm:-
alarm(5, writeln(ouch), Id, [remove(true)]).
報警機制通過發送一個信號(參見thread_signal/2)。如果Prolog很好地執行目標,信號只能被可靠地捕獲。一些長期運行的外國目標顯式查詢未決信號。一些阻止目標也可以處理它們,但這取決於操作系統。
更可靠的處理時間的方法是使用線程。例如:
?- thread_create((sleep(5), writeln(ouch)), _, [detached(true)]).
true.
?- outch
或者,您必須確保發出警報的線程處於可以接收信號的狀態。頂層不是(在所有平臺上)。 AFAIK,sleep/1是。所以,你可以確保線程正在運行(例如):
sleep :- sleep(1000), sleep.
它適用於我。 –
您正在使用哪種SWI-Prolog版本? –
我正在使用6.6.6版本 –