PDF de programación - Práctica 3: Dibuja serpiente con threads

Imágen de pdf Práctica 3: Dibuja serpiente con threads

Práctica 3: Dibuja serpiente con threadsgráfica de visualizaciones

Publicado el 14 de Enero del 2017
485 visualizaciones desde el 14 de Enero del 2017
27,2 KB
3 paginas
Creado hace 10a (14/10/2013)
Práctica 3: (Temas 3 y 4) Dibuja serpiente con threads

Práctica 3:

Dibuja serpiente con threads

(Temas 3 y 4)



• Objetivos:
• descubrir la necesidad de la concurrencia
• practicar la creación y la gestión de threads
• practicar la creación de threads periódicos

Programación Concurrente

Práctica 3: (Temas 3 y 4) Dibuja serpiente con threads

© M. Aldea

oct-13

1



2

3

Programa secuencial
Se dispone del programa serpiente_secuencial.c que permite
dibujar una “serpiente” en la pantalla

• cuyo movimiento se controla con las flechas del teclado
• cada vez que se pulsa una flecha, la serpiente avanza una

posición en el sentido indicado

++++++++++++++++++++++

*++++++

Programación Concurrente

Práctica 3: (Temas 3 y 4) Dibuja serpiente con threads

© M. Aldea

oct-13

Estructura del programa secuencial
el programa se
// lazo infinito
while(1) {
bloquea hasta que
// lee la tecla pulsada por el usuario
el usuario pulsa
tecla = getchar();
una tecla
// determina el sentido del movimiento
sentido_mov = obtenido en base a la tecla pulsada
// lo que era cabeza se convierte en parte de la cola
set_cursorxy(x_serpiente, y_serpiente);
printf("+");
// calcula la nueva posición de la cabeza
x_serpiente=suma o resta una posición (según sentido_mov)
y_serpiente=suma o resta una posición (según sentido_mov)
// dibuja la cabeza en su nueva posición
set_cursorxy(x_serpiente, y_serpiente);
printf("*");
// espera al próximo periodo
clock_nanosleep(...);
}

Programación Concurrente

© M. Aldea

oct-13

Práctica 3: (Temas 3 y 4) Dibuja serpiente con threads

Modificación del programa secuencial
Se desea que el programa se comporte de forma diferente:



• la “serpiente” deberá desplazarse a velocidad constante por la

pantalla sin esperar la pulsación de las teclas

• como antes, el sentido de su desplazamiento será el

correspondiente a la última tecla pulsada

Solución propuesta:

• transformar la aplicación secuencial en una aplicación

concurrente según la arquitectura mostrada a continuación

En este caso tan sencillo el problema también podría resolverse
utilizando una llamada al teclado no bloqueante

• pero en el caso general una solución de este tipo puede no

estar disponible

4



5



Programación Concurrente

Práctica 3: (Temas 3 y 4) Dibuja serpiente con threads

© M. Aldea

oct-13

Arquitectura
El programa constará de los siguientes threads:

lee
teclado

sentido

movimiento

variable global

T=0.1seg

dibuja
serpiente

T=1seg

pone
tiempo

Programación Concurrente

Práctica 3: (Temas 3 y 4) Dibuja serpiente con threads

© M. Aldea

oct-13

Funcionalidad de cada thread
• Thread lee_teclado
• lee cada tecla pulsada y la almacena en la variable global
tecla_pulsada

• Thread dibuja_serpiente
• dibuja la serpiente avanzando una posición cada periodo
• el sentido del avance está determinado por la última tecla

pulsada por el usuario

• Thread pone_tiempo
• muestra el tiempo de ejecución (en segundos) en la esquina

superior derecha de la pantalla

Programación Concurrente

© M. Aldea

oct-13

6

Práctica 3: (Temas 3 y 4) Dibuja serpiente con threads

Desarrollo
1. Compilar y ejecutar el programa proporcionado y observar su

funcionamiento

2. Modificar el programa para convertirlo en una aplicación

concurrente según la arquitectura propuesta



3. Añadir el thread "pone tiempo"
- muestra los segundos que

vamos ejecutando el programa
en la esquina superior derecha
de la pantalla

Programación Concurrente

Práctica 3: (Temas 3 y 4) Dibuja serpiente con threads

25

++++++++++++++++++++++

*++++++

© M. Aldea

oct-13

7

Gestión de la consola
MaRTE OS proporciona funciones para manejar la consola en
modo texto en <misc/console_management.h> (en el directorio
marte/x86_arch/include)
• Posicionamiento del cursor:

set_cursorxy()

• Cambio del color del texto y del fondo

set_text_background_color(), set_text_color()

• Configuración del teclado para que no espere la pulsación de la

tecla enter

set_raw_mode()

• Configuración de la consola para que no muestre las teclas

pulsadas

disable_echo()

Programación Concurrente

Práctica 3: (Temas 3 y 4) Dibuja serpiente con threads

© M. Aldea

oct-13

Entrega
Enviar por e-mail al profesor ([email protected]):
• Código desarrollado

8



Programación Concurrente

© M. Aldea

oct-13

9
  • Links de descarga
http://lwp-l.com/pdf1102

Comentarios de: Práctica 3: Dibuja serpiente con threads (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad