Ada 艾达:我能有两个不同的控制台窗口吗?
我将GNAT 2014用于Ada项目,我有一个简单(我希望)的问题。我可以同时打开两个“控制台”吗 让我解释一下原因:我的程序向控制台输出了大量日志数据。我希望有两个独立的控制台,一个打印程序输出,另一个接收用户输入 这可行吗?或者这是运行在操作系统端的东西,而Ada无法控制?Ada 艾达:我能有两个不同的控制台窗口吗?,ada,gnat,Ada,Gnat,我将GNAT 2014用于Ada项目,我有一个简单(我希望)的问题。我可以同时打开两个“控制台”吗 让我解释一下原因:我的程序向控制台输出了大量日志数据。我希望有两个独立的控制台,一个打印程序输出,另一个接收用户输入 这可行吗?或者这是运行在操作系统端的东西,而Ada无法控制? 我可以用GtkAda实现我想要的,但是因为我想使用尽可能少的第三方库,我想知道是否有一种本地方式(同时考虑到我需要发出的命令非常基本,比如“退出”或“暂停”,控制台输入就足够了).例如,您可以在日志框架中使用GNATCO
我可以用GtkAda实现我想要的,但是因为我想使用尽可能少的第三方库,我想知道是否有一种本地方式(同时考虑到我需要发出的命令非常基本,比如“退出”或“暂停”,控制台输入就足够了).例如,您可以在日志框架中使用GNATCOLL.Traces(而不是我假设的Put\u Line)。这将允许您精确地控制日志应该放在哪里,特别是一些日志可以配置为发送到文件,一些发送到终端 您可以做的一件事是将一些日志发送到一个文件,然后在第二个终端监视器中发送该日志文件。这也更方便,因为它允许您在日志中向上滚动,而终端往往会丢失较旧的日志
当然,同样的方法也可以通过简单的Put_行(标准错误,“…”)甚至文件来实现,但是GNATCOLL.Traces是动态配置的,这通常更方便。例如,您可以在日志框架中使用GNATCOLL.Traces(而不是我假设的Put_行)。这将允许您精确地控制日志应该放在哪里,特别是一些日志可以配置为发送到文件,一些发送到终端 您可以做的一件事是将一些日志发送到一个文件,然后在第二个终端监视器中发送该日志文件。这也更方便,因为它允许您在日志中向上滚动,而终端往往会丢失较旧的日志
当然,同样的方法也可以通过简单的Put_行(标准错误,“…”)甚至文件来实现,但是GNATCOLL.Traces是动态配置的,这通常更方便。例如,您可以在日志框架中使用GNATCOLL.Traces(而不是我假设的Put_行)。这将允许您精确地控制日志应该放在哪里,特别是一些日志可以配置为发送到文件,一些发送到终端 您可以做的一件事是将一些日志发送到一个文件,然后在第二个终端监视器中发送该日志文件。这也更方便,因为它允许您在日志中向上滚动,而终端往往会丢失较旧的日志
当然,同样的方法也可以通过简单的Put_行(标准错误,“…”)甚至文件来实现,但是GNATCOLL.Traces是动态配置的,这通常更方便。例如,您可以在日志框架中使用GNATCOLL.Traces(而不是我假设的Put_行)。这将允许您精确地控制日志应该放在哪里,特别是一些日志可以配置为发送到文件,一些发送到终端 您可以做的一件事是将一些日志发送到一个文件,然后在第二个终端监视器中发送该日志文件。这也更方便,因为它允许您在日志中向上滚动,而终端往往会丢失较旧的日志
当然,同样的方法也可以通过简单的Put_行(标准错误,“…”)甚至文件来实现,但GNATCOLL.Traces可以动态配置,这通常更方便。考虑为您想要的每个非交互式“控制台”创建一个文件:
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;
考虑为您想要的每个非交互式“控制台”创建一个文件:
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;
考虑为您想要的每个非交互式“控制台”创建一个文件:
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;
考虑为您想要的每个非交互式“控制台”创建一个文件:
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;