Comparar Respuestas
nirvanak276 de Mayo de 2013
4.266 Palabras (18 Páginas)430 Visitas
TOPICOS AVANZADOS DE PROGRAMACION
REPORTE DE “CAPITULO 13 PROGRAMACION CON HILOS”
ALUMNO
PABLO CASTILLO DAMIAN
NC: 11321224
PROFESOR
JORGE CARRANZA GOMEZ
HORARIO 7:00-8:00 HR.
INTRODUCCION
Las aplicaciones que constan de un único hilo de control resultan más de implementar y depurar que las aplicaciones con múltiples hilos que comparten, entre otros recursos, un mismo espacio de memoria. Por eso, en el caso de múltiples hilos, el entrelazado de las operaciones de los distintos hilos hace difícil la detección de errores y más aún la de corregirlos. En definitiva, todo resultaría mucho más sencillo si no hiciese falta la concurrencia.
Cuando son necesarias las concurrencias:
Supongamos la aplicación “procesador de textos Word” que tiene que ocuparse, además de la edición del texto, de la ortografía y de la gramática. Con un único hilo tendríamos que realizar esta verificación fuera del habitual trabajo de edición.
Con el uso de hilos, podemos aprovechar los períodos de inactividad de la UCP para ir haciendo la corrección ortográfica y gramatical mientras el usuario edita el texto.
El ejemplo expuesto pone de manifiesto que el diseño correcto de una aplicación concurrente permitirá completar una mayor cantidad de trabajo en el mismo período de tiempo, pero también puede servir para que las interfaces gráficas respondan mejor a las órdenes del usuario o para la creación de aplicaciones que den servicio mejor a las órdenes del usuario o para la creación de aplicaciones que den servicio a múltiples clientes, como sucede con cualquier aplicación Web.
El principal objetivo del uso de hilos es mejorar el rendimiento del sistema para dar un mejor servicio al usuario. Un ejemplo típico es el caso de una aplicación con una interfaz gráfica de usuario, en la que hilos independientes se encargan de realizar las operaciones costosas (por ejemplo, tareas como mucho cálculo) mientras que el hilo principal de la aplicación sigue gestionando los eventos procedentes de la interfaz de usuario.
METODOS Y PROPIEDADES UTILIZADAS:
System.Threading: Espacio de nombres en las cuales están definidas las clases y delegados que permiten la programación multiprocesos.
Theread: Clase que permite definir un hilo.
ThreadStart: Delegado que se emplea para especificar el punto de entrada al hilo(este delegado se le pasa como parámetro al constructor de la clase Thread para crear un hilo).
Mutex, Monitor, Interlocked o AutoResetEvent: Son clases que proporciona System.Threaading para la sincronización de hilos y del acceso a datos.
ThreadPool: Clase que permite utilizar un grupo de hilos suministrados por el sistema.
Timer: Clase que ejecuta métodos de devolución de llamada en hilos del grupo de hilos.
Start: Inicia la ejecución de un hilo.
Sleep: Detiene un hilo durante un tiempo determinado.
Suspend: Interrumpe un hilo cuando alcanza un punto seguro.
Abort: Detiene un hilo cuando alcanza un punto seguro.
Resume: Reinicia un hilo suspendido.
Join: Deja en espera un hilo hasta que finaliza otro hilo Diferente.
PROPIEDADES UTILES QUE CONTIENE UN HILO:
IsAlive. Vale True si un hilo se encuentra activo.
IsBackground. Permite obtener o establecer un valor booleano que indica si un hilo es o debería ser un hilo en segundo plano.
Name. Permite obtener o establecer el nombre de un hilo. Se utiliza principalmente con fines de depuración.
Priority. Permite obtener o asignar a un hilo uno de los siguientes valores de prioridad: Highest, AboveNormal, Normal, BelowNormal y Lowest.
ThreadState. Describe el estado o estados de un hilo.
DESARROLLO
Creamos una nueva aplicación de tipo Windows Form y la denominaremos ApMultiproceso. Crearemos 2 etiquetas: etHora y etCargaUCP (00:00:00 y CargaUCP), también añadiremos un timer nombrado como Temporizador, cambiando su propiedad Enable al valor True y su prodad Interval al valor 1000. Al formulario le modificaremos su propiedad MaximizeBox a False.
Añadimos el controlador que responda piea los eventos Tick del temporizador y lo completamos:
Private Sub Temporizador_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Temporizador.Tick
etHora.Text = DateTime.Now.ToLongTimeString
Añadimos una barra de progreso con el nombre de bpProgreso, una etiqueta etCargaUCP con el nombre de CrgarUCP y un control NumericUpDown nombrándolo como numCargaUCP y además, un botón llamado btCalcular con el texto en pantalla de Calcular.
Ahora definimos las propiedades del control NumericUpDown numCargaUCP para asignar a este control valores de 50,000 a 50, 000,000 con incrementos de 50,000, y con un valor inicial de 50,000, y de la barra de progreso para asignaerle un rango de valores de o a 100 con incremento de 1
*No podemos poner el rando de la barra de progreso de 0 a numCarga UCP Value, por que la resolución de la barra es baja y se perdería tiempo de ICP asignando valores a su propiedad, es conveniente ponerlo de la siguiente manera:
While (hecho < numCargaUCP.Value)
' Tarea secundaria
hecho += 1
' Mostrar progreso
tpHecho = hecho / numCargaUCP.Value * 100
If (tpHecho > bpProgreso.Value) Then
bpProgreso.Value = tpHecho
End If
End While
Añadimos el controlador para el evento clic del boton btCalcular
Private Sub btCalcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btCalcular.Click
btCalcular.Enabled = False
numCargaUCP.Enabled = False
bpProgreso.Value = 0
TareaSecundaria()
End Sub
El metodo btCalcular_Click invoca al metodo TareaSecundaria y se asegura de que no se pueda volver a invocar mientras TareaSecundaria no lo permita.
Este metodo define una variable hecho,con un valor inicial cero, para conocer en todo momento la cantidad realizada de la tarea secundaria o de la que queda por realizar (numCargaUCP.Value-hecho), dato que expresado en tanto por ciento por la variable tpHecho se muestra mediante la barra de progreso, cuando finaliza esto, habilita los controles btClcular y numCargaUCP para que pueda ser invocado de nuevo.
Private Sub TareaSecundaria()
Dim hecho As Integer = 0, tpHecho As Integer = 0
While (hecho < numCargaUCP.Value)
' Tarea secundaria
hecho += 1
' Mostrar progreso
tpHecho = hecho / numCargaUCP.Value * 100
If (tpHecho > bpProgreso.Value) Then
bpProgreso.Value = tpHecho
End If
End While
btCalcular.Enabled = True
numCargaUCP.Enabled = True
End Sub
Continuando, al hacer click en el boton “calcular” el metodo bt_Calcular_Click lanzara un hilo secundario que ejecute el proceso de calculo que se define bajo un nuevo metodo TareaSecundaria, en tanto que el hilo principal procesa los eventos proscedentes de la interfaz de usuario
Private Sub btCalcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btCalcular.Click
btCalcular.Enabled = False
numCargaUCP.Enabled = False
bpProgreso.Value = 0
' Delegado que hace referencia al método
' que tiene que ejecutar el hilo
Dim delegadoPS As ThreadStart = New ThreadStart(AddressOf TareaSecundaria)
' Creación del hilo
hiloSecundario = New Thread(delegadoPS)
' Ejecución del hilo
hiloSecundario.Start()
End Sub
Private Sub TareaSecundaria()
Dim hecho As Integer = 0, tpHecho As Integer = 0
While (hecho < numCargaUCP.Value)
' Tarea secundaria
hecho += 1
' Mostrar progreso
tpHecho = hecho / numCargaUCP.Value * 100
If (tpHecho > bpProgreso.Value) Then
bpProgreso.Value = tpHecho
End If
End While
btCalcular.Enabled = True
numCargaUCP.Enabled = True
End Sub
Ahora ejecutamos la aplicación
La aplicación esta en ejecucion, el mensaje extraido por el hilo principal de la cola de mensajes corresponde al evento Click sobre el boton bt_Calcular, el hilo principal crea un hilo secundario para que se encarge de esta tarea y lo ejecuta.
Los controles de los formularios Windows solo pueden ser accedidos en el hilo que los creo
El componente BackgroundWorker permite ejecutar de forma asincrona y en segundo plano operaciones que consumen grandes cantidades grandes de tiempo en un hilo diferente al hilo principal de la aplicación, para esto, solo se indica al componente cual es el metodo trabajador y llamar al metodo RunWorkerAsync, el cual puede tomar parametros que pueden despues ser pasados hacia el metodo trabajador.
...