我必须创建一个有效等待1000毫秒的程序,然后在while循环中增加一个变量。然后,每个周期都必须将此变量初始化为0。
有人能给我一个如何做到的线索吗?我有这个代码,但它根本不起作用,只是编译错误。
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Real_Time; use Ada.Real_Time;
package body waittime is
task body periodictime is
use type Time;
use type Time_Span;
Poll_Time : Ada.Real_Time.Time := 5; -- time to start polling
WaitVar : Natural := 0;
WaitTime : constant Time_Span := Milliseconds (1000);
begin
loop
delay until Poll_Time;
Poll_Time = Poll_Time + WaitTime;
WaitVar := WaitVar+1;
Put_Line (WaitVar);
end loop;
end periodictime;
end waittime;
答案 0 :(得分:2)
编写了一个(好的,明显的)软件包规范,用-gnatfl
进行编译得到了
1. with Ada.Text_IO; use Ada.Text_IO;
2. with Ada.Real_Time; use Ada.Real_Time;
3. package body waittime is
4. task body periodictime is
5. use type Time;
6. use type Time_Span;
7.
8. Poll_Time : Ada.Real_Time.Time := 5; -- time to start polling
|
>>> expected private type "Ada.Real_Time.Time"
>>> found type universal integer
9. WaitVar : Natural := 0;
10. WaitTime : constant Time_Span := Milliseconds (1000);
11. begin
12. loop
13. delay until Poll_Time;
14. Poll_Time = Poll_Time + WaitTime;
|
>>> "=" should be ":="
15. WaitVar := WaitVar+1;
16. Put_Line (WaitVar);
1 3
>>> no candidate interpretations match the actuals:
>>> missing argument for parameter "Item" in call to "put_line" declared at a-textio.ads:259
>>> expected type "Standard.String"
>>> found type "Standard.Integer"
>>> ==> in call to "Put_Line" at a-textio.ads:263
17. end loop;
18. end periodictime;
19. end waittime;
第16行的错误是Put_Line
期望String
; Ada不会动态转换。您可以通过说Natural’Image (Waitvar)
(标准Ada或GNAT扩展Waitvar’Img
)来生成字符串表示。
第14行的错误很容易解决。
第8行的错误解释了它想要什么,但修复它需要另一个改变。我想你应该
Ada.Real_Time.Clock
答案 1 :(得分:-1)
在这里,我为您编写了一些示例代码:http://www.filedropper.com/ada-periodic。您可以通过* gnatmake .adb 在unix终端中编译它,并通过 ./ main
运行有三个文件:main.adb,periodic.ads和periodic.adb 在 main.adb 中有启动程序的程序。此过程具有无限循环。此文件包含定期包(在代码中使用 with Periodic )
在 periodic.ads 中有包的声明。此packge中只有一个任务,即使用 main 过程自动启动。
在 periodic.adb 中有一个包的定义。有一个任务定义包含延迟的无限循环,直到结构。您必须获得当前时钟时间并按照您想要等待的时间段增加时间。由于这个操作,你等待一段时间,做一些事情,并设置下一次等待。