Debe introducir al menos 3 caracteres en el buscador.
Inicio / Wikis / Cursos gratis / Curso de Ada - Selección de citas (select)

Curso de Ada - Selección de citas (select)

 ****- (10 opiniones)
GNU Free Documentation License Curso gratis de José Alfonso Malo Romero - 16 de Marzo de 2006
Temas Relacionados: Programación estructurada
55. Selección de citas (select)
Uno de los usos de la sentencia select es permitir a una tarea seleccionar entre varias posibles citas; en este caso, se permite su uso únicamente dentro del cuerpo de una tarea. Su sintaxis es la siguiente:

seleccción_aceptación_cita ::= select [ when condición => ] ( acceptación_cita | ( delay [ until ] expresión ) [ secuencia_de_sentencias ] ) | ( terminate ; ) ) { or [ when condición => ] ( acceptación_cita | ( delay [ until ] expresión ) [ secuencia_de_sentencias ] ) | ( terminate ; ) ) } [ else sequencia_sentencias ] end select ;

Esta alternativa de sentencia select permite una combinación de espera y selección entre varias aceptaciones de puntos de entrada a la tarea alternativas. Además, la selección puede depender de condiciones asociadas a cada alternativa.

La sentencia delay sirve para indicar que, si en un determinado intervalo de tiempo no se produce ninguna llamada que corresponda con las selecciones anteriores, se ejecuten las sentencias posteriores.

La sentencia terminate se elige en la sentencia select si la unidad de la que la tarea depende ha llegado al final y todas las tareas hermanas y dependientes han terminado. Es una terminación controlada. Esta alternativa no puede aparecer si hay una alternativa delay o else.

Por ejemplo:

task Servidor is entry Trabajar; entry Cerrar; end; task body Servidor is begin loop select accept Trabajar do -- Se acepta la llamada a trabajar. Trabajando := True; -- Variable global. end; Trabajo_servidor; -- Trabaja. or accept Cerrar; -- Se cierra el servidor. exit; or delay (60.0); -- ¿Se han olvidado del servidor? Put ("Estoy esperando trabajar."); -- Otra opción en vez de delay: -- or -- --Terminación normal cuando se destruya el objeto tarea. -- terminate; end select; end loop; end Server;

Como otro ejemplo, para garantizar la exclusión mutua a una variable (acceso seguro a memoria compartida), se podría implementar con tareas de la siguiente manera:

task Variable_protegida is entry Leer (Elem: out TElemento); entry Escribir (Elem: TElemento); end; task body Variable_protegida is ElemLocal: TElemento; begin accept Escribir (Elem: TElemento) do ElemLocal := Elem; end Escribir; loop select accept Escribir (Elem: TElemento) do ElemLocal := Elem; end Escribir; or accept Leer (Elem: out TElemento) do Elem := ElemLocal; end Leer; end select; end loop; end Variable_protegida;

La primera sentencia de la tarea es un accept del punto de entrada Escribir, con lo que se asegura que la primera llamada aceptada de un valor a la variable local y sea leída con un valor impredecible. En el supuesto de que se realizara una llamada a Leer, ésta quedaría encolada hasta que se produjera la aceptación de Escribir. Después, la tarea entra en el bucle infinito que contiene una sentencia select. Es ahí donde se acepta tanto llamadas a Escribir como a Leer de la siguiente manera:

Si no se llama ni a Leer ni a Escribir, entonces la tarea se queda suspendida hasta que se llame a algún punto de entrada, en ese momento se ejecutará la sentencia accept correspondiente.

Si hay una o más llamadas en la cola de Leer, pero no hay llamadas en la de Escribir, se acepta la primera llamada a Leer, y viceversa.

Si hay llamadas tanto en la cola de Leer como en la de Escribir, se hace una elección arbitraria.

Es una tarea que sirve a dos colas de clientes que esperan servicios diferentes. Sin embargo, se impide el acceso múltiple a la variable local.




Manual de referencia de Ada


Tabla de contenidos
  1. 1 - Introducción
  2. 2 - Historia
  3. 3 - Manual de referencia
  4. 4 - Instalación
  5. 5 - Hola Mundo
  6. 6 - Elementos del lenguaje
  7. 7 - Tipos
  8. 8 - Enteros
  9. 9 - Enumeraciones
  10. 10 - Coma flotante
  11. 11 - Coma fija
  12. 12 - Arrays
  13. 13 - Strings
  14. 14 - Registros
  15. 15 - Registros discriminados
  16. 16 - Registros variantes
  17. 17 - Punteros a objetos
  18. 18 - Punteros a subprogramas
  19. 19 - Tipos derivados
  20. 20 - Tipos etiquetados (orientación a objetos)
  21. 21 - Subtipos
  22. 22 - Objetos (variables y constantes)
  23. 23 - Atributos
  24. 24 - Expresiones
  25. 25 - Operadores
  26. 26 - Sentencias y estructuras de control
  27. 27 - Subprogramas
  28. 28 - Sobrecarga
  29. 29 - Entrada/salida
  30. 30 - Pragmas
  31. 31 - Interfaz con otros lenguajes
  32. 32 - Diseño y programación de sistemas grandes
  33. 33 - Paquetes
  34. 34 - Clausula use
  35. 35 - Clausula with
  36. 36 - Paquete Standard
  1. 37 - Declaraciones
  2. 38 - Ámbito
  3. 39 - Visibilidad
  4. 40 - Renombrado
  5. 41 - La biblioteca Ada (unidades y subunidades)
  6. 42 - Unidades de biblioteca
  7. 43 - Unidades hijas
  8. 44 - Subunidades
  9. 45 - Compilación separada y dependiente
  10. 46 - Tipos abstractos de datos
  11. 47 - Tipos limitados
  12. 48 - Unidades genéricas
  13. 49 - Excepciones
  14. 50 - Paquete Ada.Exceptions
  15. 51 - Concurrencia
  16. 52 - Tareas
  17. 53 - Sincronización de tareas mediante puntos de entrada o citas (entry)
  18. 54 - Aceptación de citas (accept)
  19. 55 - Selección de citas (select)
  20. 56 - Llamadas a punto de entrada complejas
  21. 57 - Tareas dinamicas: creación dinamica de tareas (tipos t
  22. 58 - Dependencia de tareas
  23. 59 - Ejemplos de tareas
  24. 60 - Programación distribuida con GLADE
  25. 61 - Novedades de Ada 2005
  26. 62 - Unidades predefinidas
  27. 63 - Paquete Ada.Strings.Fixed
  28. 64 - Paquete Ada.Strings.Unbounded
  29. 65 - Paquete Ada.Text_IO
  30. 66 - Paquete Ada.Text_IO.Editing
  31. 67 - Paquete Ada.Float_Text_IO
  32. 68 - Paquete Ada.Sequential_IO
  33. 69 - Paquete Ada.Command_Line
  34. 70 - Paquete Interfaces
  35. 71 - Recursos en la Web
Autor y licencia de 'Curso de Ada - Selección de citas (select)'
José Alfonso Malo Romero Extraído de: http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_Ada_/_Introducci%C3%B3n GNU Free Documentation License
El contenido está disponible bajo los términos de GNU Free Documentation License
Licencia GNU Free Documentation License: http://www.gnu.org/copyleft/fdl.html
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Wikis relacionados con 'Curso de Ada - Selección de citas (select)'

Este curso contiene cuatro actividades. Publico la primera actividad.
Lista de FAQs que he ido recopilando durante los tres años que trabajé con Oracle,... Más »
Este es el COMO Programar el puerto serie en Linux. Todo sobre cómo programar comunicaciones... Más »
La idea es dar una guía ordenada para el estudio de este lenguaje, muy poderoso... Más »
Revisamos varios lenguajes de programación que son usados en la actualidad para hacer páginas Web.... Más »
Gente Wiki
Francisco Fernández
Soy médico naturista y magister en obesologia me interesa todo lo relacionado con el tema y las experiencias de los...
Odontología, Oftalmología y óptica,...
Luis E. Castro
Trabajo como profesor de cad y programas 3d. Pero mi vocacion fundamental reside en la creacion de infografias para arquitectura.
Alberto G. Saldívar Lugo
Estoy trabajando actualmente en la implementación de un crm para la empresa en la que laboro. Gusto de la lectura...
Manuel Veloza López
Como consultor, ayudo a las empresas a alinear el plan de negocio y el plan de tecnología + riesgos informáticos....
Herramientas de marketing, Ingeniería informática en gestión,...
Maria Isabel Pereyra
Soy licenciada en comunicación social. En la actualidad me dedico a impartir cursos de formación ocupacional y formación continua en...
maite mases
Hola, soy coach_estructudinal, en resumen coach live,ayudo a la gente que esta en un proceso de cambio, y tengo mi...
Suscribirse
¿Estás seguro de que deseas eliminar este capítulo?