我使用GNAT 2014进行Ada项目,我有一个简单的(希望)问题。我可以有两个游戏机吗?#34;同时开放?
让我解释一下原因:我的程序将大量日志记录数据输出到控制台。我想要的是拥有两个独立的控制台,一个打印程序输出,一个打开用户输入。
这可行吗?或者这是在操作系统方面运行的东西,而Ada无法控制? 我可以用GtkAda实现我想要的东西,但是因为我想尽可能少地使用第三方库,所以我想知道是否首先使用原生方式(还考虑到我需要发出的命令是非常基本的) ,像"退出"或"暂停",控制台输入就足够了。)
答案 0 :(得分:2)
考虑为每个非交互式"控制台"创建一个文件。你想要的:
with Ada.Text_IO;
generic
type Names is (<>);
package Generic_Consoles is
procedure Open_Or_Create;
function File (Name : in Names) return Ada.Text_IO.File_Access;
end Generic_Consoles;
package body Generic_Consoles is
Files : array (Names) of aliased Ada.Text_IO.File_Type;
procedure Open_Or_Create is
use Ada.Text_IO;
begin
for Name in Files'Range loop
begin
Open (File => Files (Name),
Mode => Append_File,
Name => Names'Image (Name));
exception
when others =>
Create (File => Files (Name),
Mode => Append_File,
Name => Names'Image (Name));
end;
end loop;
end Open_Or_Create;
function File (Name : in Names) return Ada.Text_IO.File_Access is
begin
return Files (Name)'Access;
end File;
end Generic_Consoles;
实例化包并调用Open_Or_Create
后,您可以使用不同的&#34;控制台&#34;使用所有常用的Ada.Text_IO输出程序:
Put_Line (File => Consoles (Parser_Errors),
Item => "Error 42: Could not parse statement.");
答案 1 :(得分:1)
例如,您可以使用GNATCOLL.Traces作为日志框架(而不是,我假设,Put_Line)。这将允许您精确控制日志的位置,特别是一些日志可以配置为发送到文件,一些日志可以发送到终端。
您可以做的一件事是将一些日志发送到文件,然后在第二个终端监视器中发送该日志文件。这也更方便,因为它允许您在日志中向上滚动,而终端将倾向于丢失旧日志。
当然,可以使用简单的Put_Line(Standard_Error,&#34; ...&#34;)甚至文件来完成相同的方法,但GNATCOLL.Traces可以动态配置,这通常更方便。