Kent iemand hier uberhaupt ada95? 
Ok, ik heb dus een task die een array krijgt om te verwerken. Nu moet dit ansynchronous gebeuren, en ik wil even niet pragma Asynchronous gebruiken.
Nu heb ik in de task bij "--Do work here" die array nodig uit de accept work. Ik kan wel een kopie (op task scope) maken maar ik wil dus eigenlijk niet die hele array kopieren. Ik kan "work" ook niet doen in de accept work, want dan wacht het hoofdprogramma totdat het klaar is met verder gaan.
Ik wil dus iets van een array pointer op task scope opslaan. Met access type werkt het niet, ik kan niet doen "a'Access" in het hoofdprogramma dan krijg ik gedoe over dat de prefix aliased moet zijn.
Hoe doe ik dit?
Ok, ik heb dus een task die een array krijgt om te verwerken. Nu moet dit ansynchronous gebeuren, en ik wil even niet pragma Asynchronous gebruiken.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| type array_type is array(Integer range <>) of Integer;
type array_ptr is access array_type;
task body my_task is
a : array_ptr;
begin
accept work(ar : in array_type) do
a := new array_type'(ar);
end work;
-- Do work here, long
delay 2.0;
accept result(ar: out array_type) do
ar := a.all;
end result;
end my_task;
-- Hoofdprogramma
a : array_type(1 .. 100000);
t : my_task;
t.work(a);
-- do other stuff
t.result(a); |
Nu heb ik in de task bij "--Do work here" die array nodig uit de accept work. Ik kan wel een kopie (op task scope) maken maar ik wil dus eigenlijk niet die hele array kopieren. Ik kan "work" ook niet doen in de accept work, want dan wacht het hoofdprogramma totdat het klaar is met verder gaan.
Ik wil dus iets van een array pointer op task scope opslaan. Met access type werkt het niet, ik kan niet doen "a'Access" in het hoofdprogramma dan krijg ik gedoe over dat de prefix aliased moet zijn.
Hoe doe ik dit?
[ Voor 10% gewijzigd door Zoijar op 10-03-2003 14:28 ]