Ada_Ru форум

Обсуждение языка Ада

Family of entries usage example.

Оставить новое сообщение

Сообщения

Dmitriy Anisimkov
Family of entries usage example.
2005-08-31 06:44:02

Изучая свойства языка написал пример использования семейства входов задачи. Предлагаю выложить на www.ada-ru.org.

 

Не уверен, можно ли внутри блока

accept Call (J) (Data : String) do

вызывать блокирующие процедуры ввода вывода. Если кто знает, подскажите ?

Ежели у кого еще какие замечания по коду, выслушаю.

Dmitriy Anisimkov wrote:

 

Не уверен, можно ли внутри блока

accept Call (J) (Data : String) do

вызывать блокирующие процедуры ввода вывода. Если кто знает, подскажите ?

 

Вызов процедур ввода-вывода допускается везде ;)

 

Единственное исключение - внутри asynchronous transfer of control - который сам по себе очень не безопасен.

 

-- Vadim Godunko

 

Technoserv A/S

Rostov-on-Don, Russia

Vadim Godunko wrote:

 

>Вызов процедур ввода-вывода допускается везде ;)

 

>Единственное исключение - внутри asynchronous transfer of control - >который сам по себе очень не безопасен.

 

 

Вообще то не допускается внутри protected call. насколько я знаю.

Че-то не работает в GNAT 5.03 под виндами. А вроде должно.

Зависает навечно, а task manager показывает 2 задачи внутри, как положено.

with Ada.Text_IO;

 

procedure Asynch_Transfer is

N : Natural := 0;

pragma Atomic (N);

begin

select

delay 1.0;

then abort

loop

N := N + 1;

end loop;

end select;

 

Ada.Text_IO.Put_Line (Integer'Image (N));

end;

 

Ошибка в GNAT что ли ?

Вот так работает.

---------------------------

with Ada.Text_IO;

 

procedure Asynch_Transfer is

N : Natural := 0;

pragma Atomic (N);

begin

select

delay 1.0;

Ada.Text_IO.Put_Line (Integer'Image (N));

then abort

-- abortable_part

loop

N := N + 1;

delay 0.001;

end loop;

end select;

end Asynch_Transfer;

------------------

Похоже abortable_part должна содержить aboratble вызовы. Верно ?

Dmitriy Anisimkov wrote:

Похоже abortable_part должна содержить aboratble вызовы. Верно ?

 

Нет. Это целиком и полностью проблема Windows.

 

В Unix обрыв исполнения реализуется через сигналы, которые принудительно выполняются сразу по поступлению, а вот в Windows необходимо их периодически проверять, что GNAT как-то там делает. Я тут не силё, н ачт оскажу тпредставител икорпоративны хинтересо?

 

 

-- Vadim Godunko

 

Technoserv A/S

Rostov-on-Don, Russia

Vadim Godunko wrote:

Dmitriy Anisimkov wrote:

 

Похоже abortable_part должна содержить aboratble вызовы. Верно ?

 

 

Нет. Это целиком и полностью проблема Windows.

 

См. описание pragma Polling

 

 

-- Vadim Godunko

 

Technoserv A/S

Rostov-on-Don, Russia

Vadim Godunko wrote:

 

>См. описание pragma Polling

 

 

Урааа ! заработала !

Предлагаю так же выложить пример на www.ada-ru.org

On Wed, Aug 31, 2005 at 03:09:40PM +0700, Dmitriy Anisimkov wrote:

Vadim Godunko wrote:

 

>См. описание pragma Polling

 

 

Урааа ! заработала !

Предлагаю так же выложить пример на www.ada-ru.org

 

Та выложить не трудно, но хотелось бы описание

хоть минимальное, что это такое, что оно делает

и куда его можно использовать.

 

 

--

Maxim Reznik

Dmitriy Anisimkov wrote:

 

Урааа ! заработала !

Предлагаю так же выложить пример на www.ada-ru.org

 

Отставить!

 

А с -gnato кто нибудь проверял?!

 

 

 

-- Asynchronous Transfer of Control example.

-- Author: Dmitriy Anisimkov.

-- License: GPL

--

-- Use -gnatP switch in GNAT for Win32.

 

with Ada.Text_IO;

 

procedure Asynch_Transfer is

N : Natural := 0;

pragma Atomic (N);

begin

select

delay 1.0; -- Could be entry call.

Ada.Text_IO.Put_Line (Integer'Image (N));

 

then abort

loop

N := N + 1;

^^^^^^^^^^

Ведь здесь должна быть (и будет с -gnato) Constraint_Error!

 

Имеет смысл в примере заменить N : Natural на

 

type T is mod 2 ** 32 - 1;

 

N : T := 0;

 

Тогда уж точно всегда верно будет.

 

 

--

Vadim Godunko

Vadim Godunko wrote:

 

>Отставить!

 

>А с -gnato кто нибудь проверял?!

 

 

Как я понимаю там до переполнения далеко, при текущем положении дел в вычислительной технике.

Но ради чистоты кода, согласен.

 

-- Asynchronous Transfer of Control example.

-- Author: Dmitriy Anisimkov.

-- License: GPL

--

-- Use -gnatP switch in GNAT for Win32.

 

with Ada.Text_IO;

with System;

 

procedure Asynch_Transfer is

type Modular_Type is mod 2 ** System.Word_Size;

 

N : Modular_Type := 0;

pragma Atomic (N);

begin

select

delay 1.0; -- Could be entry call.

Ada.Text_IO.Put_Line (Modular_Type'Image (N));

 

then abort

loop

N := N + 1;

end loop;

end select;

 

Ada.Text_IO.Put_Line ("Done.");

end Asynch_Transfer;

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти