Desarrollador Profesional de Juegos Programación III Unidad II Introdución a threading en windows.

Slides:



Advertisements
Presentaciones similares
UNIVERSIDAD PRIVADA SAN PEDRO ESCUELA INGENIERIA CIVIL
Advertisements

ING SEC 3 - UCSC Agosto 2009 Laboratorio Lenguaje de Programación ING – Universidad Católica SSMA Concepción Semestre II Tema:
Archivos de Texto. Introducción Los archivos son una secuencia de bits que se guarda en el disco duro. La ventaja de utilizar archivos es que los datos.
Curso de Microsoft® Word 2010
Ejemplo de Programa C++
Aprendizaje de Microsoft® Access® 2010
Permite : Asignar recursos a tareas Crear dependencias entre tareas Ver los recursos disponibles Filtrar las tareas por estado y ordenarlas según prioridad.
Introducción a Programación Concurrente
Prof. Franklin Cedeño. FUNCIONES EN C++ Cuando tratamos de resolver un problema, resulta muy útil utilizar la filosofía de “divide y vencerás”. Esta estrategia.
Ejemplo: Creación y mutación de procesos
Para entrar al menú de los temas de Firefox, vamos al menú correspondiente:
Crea tu propia porosperidad
No conformidades.
Acciones y funciones Concepto
La estructura básica de los programas en java, algo a tener en cuenta y que debemos recordar siempre es el archivo debe llevar el nombre de la clase con.
Las variables en PHP Programación en Internet II.
El lenguaje de programación C - Funciones -
Chapter 7 Functions Dale/Weems/Headington. 2 Tópicos Capítulo 7 l Writing a Program Using Functional Decomposition l Writing a Void Function for a Task.
CIUDADES INTRODUCCIÓN ¿Qué sabes sobre Sevilla, Gerona, Santander, Albacete o Huesca? ¿Y sobre Cartagena de Indias, Caracas, Quito o San Salvador? ¿No.
Tema 6: Clases Antonio J. Sierra.
TÉCNICO EN PROGRAMACIÓN DE SOFTWARE Instructor: Ingeniero Adrián Guerrero Taborda
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
VHDL.
Trabajar con patrones de documentos j En la barra de mensajes, haga clic en Habilitar edición, Si los vídeos de este curso no se reproducen, quizás necesite.
Introducción a la Computación
Semana 5 Subprogramas..
Programación III Clase 07 Funciones.
1 Planteamiento del problema ¿Tenemos los humanos la capacidad de percibir si nos miran desde atrás? O, más exactamente: ¿Es defendible que existen otras.
Estructura de un programa en C
Prog. Univ. Rodríguez Rey, Pablo Funciones Programación I.
Rumpelstinsquillo Caro Andonie.
Desarrollador Profesional de Juegos Programación III Unidad II Una clase thread para window.
TEXTO EXPOSITIVO.
El joven que huyó Colección: Temas para jóvenes Mc 14, 51-52
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
Pablo Abrile1 Threads Lenguajes de Programación I.
Material de apoyo Unidad 4 Estructura de datos
LAS REUNIONES 15 No exijamos de más al Presiente de Debates!
Elementos básicos del lenguaje
APRENDIZ: SANDRA L. CAICEDO C. ORDEN: 20194
Listas Ligadas Simples. Definíción I  Es, en sencillas palabras. un grupo de datos organizados secuencialmente, pero a diferencia de los arreglos, la.
Elementos básicos del lenguaje
Rendimiento de la CPU y sus factores
INTRODUCCION A LA PROGRAMACION
La necesidad de sistematizar las experiencias de su trabajo es un aspecto frecuentemente mencionado por muchas personas que trabajan en el campo de desarrollo.
Paso 1 Introducimos el CD de instalación de Windows XP en la unidad de CD- ROM. Reiniciamos el PC y tenemos que configurar la BIOS para que el ordenador.
Las fórmulas más usadas en excel
C OLEGIO T ÉCNICO S ALESIANO Nombres: Juan Orellana Jorge Sarmiento Curso: 3º de Bachillerato E1 Tema: Instalación Nativa y Virtual de Ubuntu 9.04.
“Instalación de TuneUp Utilities” Para empezar la instalación de TuneUp Utilities, haga doble clic en el ejecutable del programa: Se le abrirá el asistente.
Microsoft Office Project INTRODUCCIÓN A LA GESTIÓN DE PROYECTOS Microsoft Office Project 2010.
Práctica Profesional PHP.
Introducción al lenguaje PROCESSING para ARDUINO
Algoritmo.
Corporación Universitaria del Caribe CECAR Fundamentos de programación II.
Desarrollador Profesional de Juegos Programación III Unidad II Trabajando con bloqueo de datos.
Aprendiendo a utilizar Derive 6
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
P y E 2014 Clase 4Gonzalo Perera1 Repaso de clase anterior Probabilidad condicional, independencia de sucesos. Distribución Binomial e Hipergeométrica.
MACROS PARA EXCEL xd.
Desarrollador Profesional de Juegos Programación III Unidad II introducción a Mutex Secciones críticas.
TEMA I Teoría de Circuitos
Desarrollador Profesional de Juegos Programación III Unidad I Capturar Excepciones.
Desarrollador Profesional de Juegos Programación III Unidad I Excepciones Tipos.
Desarrollador Profesional de Juegos Programación III Unidad II Hilos de ejecución Threads.
JOANN GÓMEZ MAX SOLANO RAUL RUSTRIAN ECUACIONES DE SEGUNDO GRADO BUENAS SOMOS JOANN, RAUL Y MAX Y LES PRESENTAMOS EL TEMA ECUACIONES DE SEGUNDO GRADO.
P ROCESO DE E NSAMBLADO Cámara Vázquez Berenice Rubí.
Katty Evangelina Hipólito Chi.   Aunque cada maquina tiene un lenguaje ensamblador distinto, el proceso de ensamblador tiene suficiente similitudes.
Ciclos de Repeticion Yoel Gutierrez Unidad 6. Contenido DefinicionExplicacionEjemplosReferencias.
Palabras de uso frecuente 1er grado. soy mí tu / tú.
1 Clase 11: orientación a objetos (2ª parte) iic1102 – introducción a la programación.
Transcripción de la presentación:

Desarrollador Profesional de Juegos Programación III Unidad II Introdución a threading en windows

Introducion a threading en windows Temas ¿Que es una thread? CreateThread() WaitForSingleObject()

Threads En este ejemplo se crearan 2 threads; y solamente imprimirá un mensaje cuando los thread se ejecuten. Vamos a considerar a la función main() como un thread. Además se lo considerará como "main thread“ el thread principal. Es el thread que arranca cuando corremos nuestro programa. Entonces podemos decir que nuestro programa siempre crea un thread por default. Incluimos la libraría windows.h porque es necesario para todas las rutinas de threading. #include using namespace std; void main() { cout << "Introduccion a Windows Threading"<<endl; HANDLE threadHandle; threadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) threadProc, NULL, 0, NULL); WaitForSingleObject( threadHandle, INFINITE); system("pause"); }

¿Como crear un thread? Hay algunas funciones de windows que sirven para esta tarea. Usaremos la función CreateThread(). La descripción completa está en Vemos que tiene 3 argumentos. Por ahora solo nos importará el tercer argumento.. En efecto cuando llamemos a la función, los otros parámetros serán 0, o NULL. El tercer parámetro es el que en la definición se conoce como ThreadProc o "thread procedure". Como el nombre lo indica, este es el procedimiento (o función) que se ejecutará cuando se cree el trhead. Este procedimiento es simplemente una función que escribiremos en nuestro programa. Entonces ¿significa que cuando creamos un thread le estamos diciendo al programa que ejecute una función? CLARO! Crear un thread es esencialmente lo mismo que llamar a una función la diferencia es que le estamos diciendo a esta, que lo haga al mismo tiempo que otras funciones. Entonces antes de comenzar un thread, tenemos que tener una función a ejecutar. Se llamará threadProc. la función que el thread ejecutará es : void threadProc() { cout << "Soy un thread ejecutandose!! “<<endl; }

Ahora que tenemos el thread procedure usaremos CreateThread para crear el thread. // El main thread void main() { cout << "Introduccion a Windows Threading"<<endl; // Creamos nuestro thread y ejecutamos la función threadProc. HANDLE threadHandle; threadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) threadProc, NULL, 0, NULL); CreateThread devuelve un HANDLE. Este handle es nada más que un identificador para que la computadora referencie a el thread. Lo usaremos más adelante. ¡Entonces creamos nuestro primer thread! continúa

Hay otra función que veremos y es WaitForSingleObject(), es muy útil ya que espera a un objeto que termine lo que está haciendo antes de continuar ejecutando. La definición es: WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds); hHandle - el handle del objeto al que queremos esperar (en este caso será nuestro threadHandle) dwMilliseconds - el máximo numero de milisegundos que esperaremos al objeto terminar antes que continué con la ejecución. (en este ejemplo esperara para siempre) En otras palabras WaitForSingleObject detendrá main thread hasta que threadProc vuelva. Va a esperar hasta que nuestro hilo de ejecución se lleva a cabo luego continua. WaitForSingleObject(threadHandle, INFINITE); // Una vez que nuestro thread terminó decirme cuando terminar. system("pause"); } Threads

Y terminamos. Hemos creado un hilo desde nuestro hilo principal, luego esperó al hilo hasta el final de su ejecución y termino el programa. ¿Por qué molestamos por llamar a WaitForSingleObject? Parece que, si hemos comenzado nuestro hilo, sólo se ejecutará independientemente de si tenemos o no que esperar a que termine nuestro hilo principal. Esto es cierto. Sin embargo, cuando se ejecuta este programa, se nota una ligera pausa antes de ver la impresión del mensaje de threadProc. Esto se debe a le lleva un poco de tiempo a nuestro equipo crear el hilo y comenzar a ejecutarlo. No hay manera de saber cuánto tiempo podría llevarle para crear el thread. Podría ser casi de inmediato, si no estamos asignando una gran cantidad de datos y nuestro equipo no está muy ocupado. Pero también podría tomar algunos segundos si estamos ejecutando otras tareas intensas. Si tuviéramos que dejar que nuestro programa principal iniciar el nuevo hilo y luego inmediatamente termine, nunca llegaría a ver el mensaje de salida Y esto se debe a que nuestro hilo principal salio antes de la theadProc incluso antes de empezar!

Para probar modifiquemos el código comentado la instrucción WaitForSingleObject (). #include using namespace std; void main() { cout << "Introduccion a Windows Threading"<<endl; HANDLE threadHandle; threadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) threadProc, NULL, 0, NULL); //WaitForSingleObject( threadHandle, INFINITE); system("pause"); } ¿Qué sucede? ¿El mensaje del hilo aparecen después del mensaje "presione cualquier tecla para continuar"? Lo más probable es que si. Esto se debe a la computadora puede ejecutar el código del hilo principal mucho más rápido que el hilo que se crea.. Aquí WaitForSingleObject lo vemos como una introducción. En la próxima unidad veremos un ejemplo más práctico.

Resumen Hemos aprendido lo que es un hilo, y para que es útil. Hemos aprendido a crear un hilo siguiendo un procedimiento que hemos creado nosotros mismos. Y hemos aprendido cómo hacer referencia a un hilo con el handle que recibimos cuando se creó el mismo. En la siguiente unidad, aprenderemos sobre mutex y por qué debemos usarlo para proteger ciertos datos de una posible corrupción.