concurrency - 预期的私有类型“Ada.Real_Time.Time_Span”
问题描述
我有以下任务主体:
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Real_Time; use Ada.Real_Time;
with Ada.Task_Identification; use Ada.Task_Identification;
package body pkg_task is
task body task_t is
activationTime : Time_Span := 1; -- 1 second
period : Time_Span := 2; -- 2000 milliseconds
computingTime : Time_Span := 1; -- 1000 milliseconds
activeWaiting : Integer;
startingTime : Time;
begin
delay To_Duration(activationTime);
startingTime := Clock;
while (Clock - startingTime) < computingTime loop
activeWaiting := activeWaiting + 1;
Put_Line("Task(" & Image(Current_Task) & "): Internal variable: " & Integer'Image(activeWaiting));
if (period - (Clock - startingTime)) < computingTime then
delay To_Duration(period - (Clock - startingTime));
end if;
end loop;
end task_t;
end pkg_task;
编译时,我得到了提到的错误:
gcc-7 -c pkg_task.adb
pkg_task.adb:8:47: expected private type "Ada.Real_Time.Time_Span"
pkg_task.adb:8:47: found type universal integer
pkg_task.adb:9:39: expected private type "Ada.Real_Time.Time_Span"
pkg_task.adb:9:39: found type universal integer
pkg_task.adb:10:46: expected private type "Ada.Real_Time.Time_Span"
pkg_task.adb:10:46: found type universal integer
问题是我对这门语言很陌生,而且我不太了解它。事实上,我可以说它有点复杂,而且我在 Internet 上找不到太多信息。
解决方案
由于 Time_Span 是私有类型,因此不会自动转换文字。尝试:
To_Time_Span (1.0)
此外,由于 To_Time_Span 的参数是实数类型(持续时间),因此您需要小数部分。Ada 不会让您在没有显式转换的情况下混合整数和实数类型。
推荐阅读
- apache-nifi - ListenHTTP 没有设置正确的 Content-Type
- r - 与拼凑组合时,将 geom_point 数据与 geom_col 数据对齐
- electron - 致命错误 A1000:无法打开文件:deps\libffi\src\x86\win32.asm
- unity3d - 当我使用 2D 光线投射进行碰撞时,我的对象与地面发生了碰撞
- python - 日期时间在两个完全任意的日期出现故障
- r - 为不在我的数据库中的日期生成图表
- javascript - 不能对一个元素使用两个过渡
- python - 如何在函数中声明“函数”类型的参数
- sql - 用 hsql 从表中替换多个值的子字符串
- r - 如何根据 r 中的时间对数据框进行子集化?