品尝 GNU Prolog (4)
2010-10-07 15:44
190 查看
http://blog.csdn.net/lawme/archive/2008/10/18/3093692.aspx
七、一条大虫(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,结果正常。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lawme/archive/2008/10/18/3093692.aspx
七、一条大虫(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,结果正常。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lawme/archive/2008/10/18/3093692.aspx
相关文章推荐
- 品尝 GNU Prolog (1)
- 品尝 GNU Prolog (1)
- 品尝 GNU Prolog (1)
- 品尝 GNU Prolog (2)
- 品尝 GNU Prolog (2)
- 品尝 GNU Prolog (3)
- 品尝 GNU Prolog (3)
- 品尝 GNU Prolog (4)
- SharePoint Server 2007 trial --- 年末大餐细细品尝 (第六口)
- GNU Prolog 的数组
- 春天闻香食花——品尝一顿愉悦的花餐
- 菜鸟学Linux(3)品尝鸟哥私房菜——…
- 品尝棉花糖之Nexus5线刷Android6.0攻略
- SharePoint Server 2007 trial --- 年末大餐细细品尝 (第七口)
- 用C++品尝Vista美味:界面的毛玻璃效果
- 品尝Android(二)jQuery Mobile初探
- 菜鸟学Linux(4)品尝鸟哥私房菜——…
- 用C++品尝Vista美味:界面的毛玻璃效果——涨姿势
- SharePoint Server 2007 trial --- 年末大餐细细品尝 (第八口)
- [双语阅读]奥巴马:希望故地重游 品尝印尼美食