品尝 GNU Prolog (4)
2008-10-18 06:25
253 查看
七、一条大虫(bug)
用 gprolog 的 consult 运行 tictactoe.pl,OK,一切正常。
用 gplc 编译成 tictactoe.exe 后运行,oh! 程序卡死了。GTK-Server 对于用户的鼠标操作,不起反应。
问题的原因,是两端的程序联通受阻,直接肇事者是它:
exec('gtk-server stdin post=.', Pout, Pin, _, _)
这条DOS控制台指令,使双方以STDIN方式建立的连接,造成了运行卡死的故障。
有可能这是 GNU Prolog 的一个 bug。
这个问题可以解决。方法是放弃 STDIN方式的连接,改用 TCP 方式的连接。修改后的谓词如下:
start:- init(Socket, In, Out), gui(Pin, Pout), callback(Pin, Pout).
init(Socket, In, Out):- % Start server in TCP mode exec('gtk-server tcp=localhost:40000', _, _, _, _), % Wait for the server to initialize sleep(1), % Define socket socket('AF_INET', Socket), % Try to connect socket_connect(Socket, 'AF_INET'(localhost, 40000), In, Out).
api(In, Out, Txt, Result):- % Write string to socket write(Out, Txt), % Force flush on socket flush_output(Out), % Read info read_token(In, Result).
替换 tictactoe.pl 相应的谓词后,编译运行 tictactoe.exe,结果正常。
用 gprolog 的 consult 运行 tictactoe.pl,OK,一切正常。
用 gplc 编译成 tictactoe.exe 后运行,oh! 程序卡死了。GTK-Server 对于用户的鼠标操作,不起反应。
问题的原因,是两端的程序联通受阻,直接肇事者是它:
exec('gtk-server stdin post=.', Pout, Pin, _, _)
这条DOS控制台指令,使双方以STDIN方式建立的连接,造成了运行卡死的故障。
有可能这是 GNU Prolog 的一个 bug。
这个问题可以解决。方法是放弃 STDIN方式的连接,改用 TCP 方式的连接。修改后的谓词如下:
start:- init(Socket, In, Out), gui(Pin, Pout), callback(Pin, Pout).
init(Socket, In, Out):- % Start server in TCP mode exec('gtk-server tcp=localhost:40000', _, _, _, _), % Wait for the server to initialize sleep(1), % Define socket socket('AF_INET', Socket), % Try to connect socket_connect(Socket, 'AF_INET'(localhost, 40000), In, Out).
api(In, Out, Txt, Result):- % Write string to socket write(Out, Txt), % Force flush on socket flush_output(Out), % Read info read_token(In, Result).
替换 tictactoe.pl 相应的谓词后,编译运行 tictactoe.exe,结果正常。
相关文章推荐
- 品尝 GNU Prolog (1)
- 品尝 GNU Prolog (2)
- 品尝 GNU Prolog (1)
- 品尝 GNU Prolog (3)
- 品尝 GNU Prolog (2)
- 品尝 GNU Prolog (4)
- 品尝 GNU Prolog (3)
- 品尝 GNU Prolog (1)
- 品尝咖啡的态度
- SharePoint Server 2007 trial --- 年末大餐细细品尝 (第八口)
- 去东北品尝朝鲜族特爱吃的狗肉
- [玩转Silverlight]第一回:基础篇,品尝与HttpHandler通信
- 品尝Android(三)移动终端报表展示
- 品尝寂寞
- 菜鸟学Linux(5)品尝鸟哥私房菜——…
- 二级物料处理程序,下(品尝ABAP的味道)
- 【日常学习】【二分】【最长不下降子序列长度】codevs4214 [Mz]品尝美食题解
- 品尝阿里云容器服务:5个2核4G节点使用情况记载
- SharePoint Server 2007 trial --- 年末大餐细细品尝 (第一口)
- SharePoint Server 2007 trial --- 年末大餐细细品尝 (第九口)