2016-05-07 70 views
1

我必須製作一個程序,它有一個1000毫秒的有效等待時間,然後在while循環內的那段時間內增加一個變量。然後,這個變量必須在每個循環中初始化爲0。使用Ada.Real_Time每1000毫秒增量變量

有人可以給我一個線索如何做到這一點?我有這個代碼,但它根本不工作,只是編譯錯誤。

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; 
+2

阿達,阿達,阿達,艾達 - 我累的人不知道怎麼寫的名字。你可以把你得到的錯誤 - 會幫助你更容易和更快。 – darkestkhan

+1

通常最好說錯誤信息實際上是什麼,而不是期望我們下載你的代碼,編寫一個包規範,然後自己運行編譯器。 –

+0

什麼「然後,這個變量必須在每個循環中初始化爲0」,是什麼意思? –

回答

-1

這裏我給你寫了一些示例代碼:http://www.filedropper.com/ada-periodic。您可以通過編譯此即UNIX終端* gnatmake 名.adb./main

運行中有三個文件:main.adb,periodic.ads和periodic.adb 在main.adb有程序啓動程序。這個過程有無限循環。並且此文件包括週期性包(通過使用與代碼週期

periodic.ads有包的聲明。此包裝中只有一項任務,即自動啓動主要程序。

periodic.adb有一個包的定義。有一個任務定義包含無限循環,延遲時間爲,直到結構。你必須獲得當前的時鐘時間,並在你想等待的時間段內增加它。由於這個操作,你等待一段時間,做點什麼,然後等下一次。

2

已經寫入的(OK,明顯)封裝規格,與-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行的錯誤解釋了它的要求,但要解決它需要另一個更改。我想你應該

  1. 初始化Ada.Real_Time.Clock
  2. 交換線13和14