Hilos en Java. Crear un Hilo. Detener un hilo. Fuente:
|
|
- Cristóbal Ríos Cortés
- hace 8 años
- Vistas:
Transcripción
1 Fuente: Hilos en Java A veces necesitamos que nuestro programa Java realice varias cosas simultáneamente. Otras veces tiene que realizar una tarea muy pesada, por ejemplo, consultar en el listín telefónico todos los nombres de chica que tengan la letra n, que tarda mucho y no deseamos que todo se quede parado mientras se realiza dicha tarea. Para conseguir que Java haga varias cosas a la vez o que el programa no se quede parado mientras realiza una tarea compleja, tenemos los hilos (Threads). Crear un Hilo Crear un hilo en java es una tarea muy sencilla. Basta heredar de la clase Thread y definir el método run(). Luego se instancia esta clase y se llama al método start() para que arranque el hilo. Más o menos esto public MiHilo extends Thread public void run() // Aquí el código pesado que tarda mucho ; MiHilo elhilo = new MiHilo(); elhilo.start(); System.out.println("Yo sigo a lo mio"); Listo. Hemos creado una clase MiHilo que hereda de Thread y con un método run(). En el método run() pondremos el código que queremos que se ejecute en un hilo separado. Luego instanciamos el hilo con un new MiHilo() y lo arrancamos con elhilo.start(). El System.out que hay detrás se ejecutará inmediatamente después del start(), haya terminado o no el código del hilo. Detener un hilo Suele ser una costumbre bastante habitual que dentro del método run() haya un bucle infinito, de forma que el método run() no termina nunca. Por ejemplo, supongamos un 1
2 chat. Cuando estás chateando, el programa que tienes entre tus manos está haciendo dos cosas simultáneamente. Por un lado, lee el teclado para enviar al servidor del chat todo lo que tú escribas. Por otro lado, está leyendo lo que llega del servidor del chat para escribirlo en tu pantalla. Una forma de hacer esto es "por turnos" while (true) leeteclado(); envialoleidoalservidor(); leedelservidor(); muestraenpantallaloleidodelservidor(); Esta, desde luego, es una opción, pero sería bastante "cutre", tendríamos que hablar por turnos. Yo escribo algo, se le envía al servidor, el servidor me envía algo, se pinta en pantalla y me toca a mí otra vez. Si no escribo nada, tampoco recibo nada. Quizás sea buena opción para los que no son ágiles leyendo y escribiendo, pero no creo que le guste este mecanismo a la mayoría de la gente. Lo normal es hacer dos hilos, ambos en un bucle infinito, leyendo (del teclado o del servidor) y escribiendo (al servidor o a la pantalla). Por ejemplo, el del teclado puede ser así public void run() while (true) String texto = leedelteclado(); enviaalservidor(texto); Esta opción es mejor, dos hilos con dos bucles infinitos, uno encargado del servidor y otro del teclado. Ahora viene la pregunta del millón. Si queremos detener este hilo, qué hacemos?. Los Thread de java tienen muchos métodos para parar un hilo: destroy(), stop(), suspend() Pero, si nos paramos a mirar la API de Thread, nos llevaremos un chasco. Todos esos métodos son inseguros, están obsoletos, desaconsejados o las tres cosas juntas. Cómo paramos entonces el hilo? La mejor forma de hacerlo es implementar nosotros mismos un mecanismo de parar, que lo único que tiene que hacer es terminar el método run(), saliendo del bucle. 2
3 Un posible mecanismo es el siguiente public class MiHilo extends Thread // boolean que pondremos a false cuando queramos parar el hilo private boolean continuar = true; // metodo para poner el boolean a false. public void detenelhilo() continuar=false; // Metodo del hilo public void run() // mientras continuar while (continuar) String texto = leedelteclado(); enviaalservidor(texto); Simplemente hemos puesto en la clase un boolean para indicar si debemos seguir o no con el bucle infinito. Por defecto a true. Luego hemos añadido un método para cambiar el valor de ese boolean a false. Finalmente hemos cambiado la condición del bucle que antes era true y ahora es continuar. Para parar este hilo, es sencillo MiHilo elhilo = new MiHilo(); elhilo.start(); // Ya tenemos el hilo arrancado // Ahora vamos a detenerlo elhilo.detenelhilo(); Sincronización de hilos Cuando en un programa tenemos varios hilos corriendo simultáneamente es posible que varios hilos intenten acceder a la vez a un mismo sitio (un fichero, una conexión, un array 3
4 de datos) y es posible que la operación de uno de ellos entorpezca la del otro. Para evitar estos problemas, hay que sincronizar los hilos. Por ejemplo, si un hilo con vocación de Cervantes escribe en fichero "El Quijote" y el otro con vocación de Shakespeare escribe "Hamlet", al final quedarán todas las letras entremezcladas. Hay que conseguir que uno escriba primero su Quijote y el otro, luego, su Hamlet. Sincronizar usando un objeto Imagina que escribimos en un fichero usando una variable fichero de tipo PrintWriter. Para escribir uno de los hilos hará esto fichero.println("en un lugar de la Mancha"); Mientras que el otro hará esto fichero.println(" ser o no ser "); Si los dos hilos lo hacen a la vez, sin ningún tipo de sincronización, el fichero al final puede tener esto En un ser lugar de la o no Mancha ser Para evitarlo debemos sincronizar los hilos. Cuando un hilo escribe en el fichero, debe marcar de alguna manera que el fichero está ocupado. El otro hilo, al intentar escribir, lo verá ocupado y deberá esperar a que esté libre. En java esto se hace fácilmente. El código sería así synchronized (fichero) fichero.println("en un lugar de la Mancha"); y el otro hilo synchronized (fichero) fichero.println(" ser o no ser "); Al poner synchronized(fichero) marcamos fichero como ocupado desde que se abren las llaves de después hasta que se cierran. Cuando el segundo hilo intenta también su 4
5 synchronized(fichero), se queda ahí bloqueado, en espera que de que el primero termine con fichero. Es decir, nuestro hilo Shakespeare se queda parado esperando en el synchronized(fichero) hasta que nuestro hilo Cervantes termine. synchronized comprueba si fichero está o no ocupado. Si está ocupado, se queda esperando hasta que esté libre. Si está libre o una vez que esté libre, lo marca como ocupado y sigue el código. Este mecanismo requiere colaboración entre los hilos. El que hace el código debe acordarse de poner synchronized siempre que vaya a usar fichero. Si no lo hace, el mecanismo no sirve de nada. Métodos sincronizados Otro mecanismo que ofrece java para sincronizar hilos es usar métodos sincronizados. Este mecanismo evita además que el que hace el código tenga que acordarse de poner synchronized. Imagina que encapsulamos fichero dentro de una clase y que ponemos un método synchronized para escribir, tal que así public class ControladorDelFichero private PrintWriter fichero; public ControladorFichero() // Aqui abrimos el fichero y lo dejamos listo // para escribir. public synchronized void println(string cadena) fichero.println(cadena); Una vez hecho esto, nuestros hilos Cervantes y Shakespeare sólo tienen que hacer esto 5
6 ControladorFichero control = new ControladorFichero(); // Hilo Cervantes control.println("en un lugar de la Mancha "); // Hilo Shakespeare control.println(" ser o no ser "); Al ser el método println() synchronized, si algún hilo está dentro de él ejecutando el código, cualquier otro hilo que llame a ese método se quedará bloqueado en espera de que el primero termine. Este mecanismo es más mejor porque, siguiendo la filosofía de la orientación a objetos, encapsula más las cosas. El fichero requiere sincronización, pero ese conocimiento sólo lo tiene la clase ControladorFichero. Los hilos Cervantes y Shakespeare no saben nada del tema y simplemente se ocupan de escribir cuando les viene bien. Tampoco depende de la buena memoria del programador a la hora de poner el synchronized(fichero) de antes. Otros objetos que necesitan sincronización Hemos puesto de ejemplo un fichero, pero requieren sincronización en general cualquier entrada y salida de datos, como pueden ser ficheros, sockets o incluso conexiones con bases de datos. También pueden necesitar sincronización almacenes de datos en memoria, como LinkedList, ArrayList, etc. Imagina, por ejemplo, en una LinkedList que un hilo está intentando sacar por pantalla todos los datos LinkedList lista = new LinkedList(); for (int i=0;i<lista.size(); i++) System.out.println(lista.get(i)); Estupendo y maravilloso pero qué pasa si mientras se escriben estos datos otro hilo borra uno de los elementos?. Imagina que lista.size() nos ha devuelto 3 y justo antes de intentar escribir el elemento 2 (el último) viene otro hilo y borra cualquiera de los elementos de la lista. Cuando intentemos el lista.get(2) nos saltará una excepción porque la lista ya no tiene tantos elementos. 6
7 La solución es sincronizar la lista mientras la estamos usando LinkedList lista = new LinkedList(); synchronized (lista) for (int i=0;i<lista.size(); i++) System.out.println(lista.get(i)); además, este tipo de sincronización es la que se requiere para mantener "ocupado" el objeto lista mientras hacemos varias llamadas a sus métodos (size() y get()), no queda más remedio que hacerla así. Por supuesto, el que borra también debe preocuparse del synchronized. Esperando datos: wait() y notify() A veces nos interesa que un hilo se quede bloqueado a la espera de que ocurra algún evento, como la llegada de un dato para tratar o que el usuario termine de escribir algo en una interface de usuario. Todos los objetos java tienen el método wait() que deja bloqueado al hilo que lo llama y el método notify(), que desbloquea a los hilos bloqueados por wait(). Vamos a ver cómo usarlo en un modelo productor/consumidor. Bloquear un hilo Antes de nada, que quede claro que las llamadas a wait() lanzan excepciones que hay que capturar. Todas las llamadas que pongamos aquí deberían estar en un bloque try-catch, así try // llamada a wait() catch (Exception e). 7
8 pero para no liar mucho el código y mucho más importante, no auto darme más trabajo de escribir de la cuenta, no voy a poner todo esto cada vez. Cuando hagas código, habrá que ponerlo. Vamos ahora a lo que vamos Para que un hilo se bloquee basta con que llame al método wait() de cualquier objeto. Sin embargo, es necesario que dicho hilo haya marcado ese objeto como ocupado por medio de un synchronized. Si no se hace así, saltará una excepción de que "el hilo no es propietario del monitor" o algo así. Imaginemos que nuestro hilo quiere retirar datos de una lista y si no hay datos, quiere esperar a que los haya. El hilo puede hacer algo como esto synchronized(lista); if (lista.size()==0) lista.wait(); dato = lista.get(0); lista.remove(0); En primer lugar hemos hecho el synchronized(lista) para "apropiarnos" del objeto lista. Luego, si no hay datos, hacemos el lista.wait(). Una vez que nos metemos en el wait(), el objeto lista queda marcado como "desocupado", de forma que otros hilos pueden usarlo. Cuando despertemos y salgamos del wait(), volverá a marcarse como "ocupado." Nuestro hilo se desbloquerá y saldrá del wait() cuando alguien llame a lista.notify(). Si el hilo que mete datos en la lista llama luego a lista.notify(), cuando salgamos del wait() tendremos datos disponibles en la lista, así que únicamente tenemos que leerlos (y borrarlos para no volver a tratarlos la siguiente vez). Existe otra posibilidad de que el hilo se salga del wait() sin que haya datos disponibles, pero la veremos más adelante. Notificar a los hilos que están en espera Hemos dicho que el hilo que mete datos en la lista tiene que llamar a lista.notify(). Para esto también es necesario apropiarnos del objeto lista con un synchronized. El código del hilo que mete datos en la lista quedará así synchronized(lista) lista.add(dato); 8
9 lista.notify(); Listo, una vez que hagamos esto, el hilo que estaba bloqueado en el wait() despertará, saldrá del wait() y seguirá su código leyendo el primer dato de la lista. wait() y notify() como cola de espera wait() y notify() funcionan como una lista de espera. Si varios hilos van llamando a wait() quedan bloqueados y en una lista de espera, de forma que el primero que llamó a wait() es el primero de la lista y el último es el útlimo. Cada llamada a notify() despierta al primer hilo en la lista de espera, pero no al resto, que siguen dormidos. Necesitamos por tanto hacer tantos notify() como hilos hayan hecho wait() para ir despertándolos a todos de uno en uno. Si hacemos varios notify() antes de que haya hilos en espera, quedan marcados todos esos notify(), de forma que los siguientes hilos que hagan wait() no se quedaran bloqueados. En resumen, wait() y notify() funcionan como un contador. Cada wait() mira el contador y si es cero o menos se queda bloqueado. Cuando se desbloquea decrementa el contador. Cada notify() incrementa el contador y si se hace 0 o positivo, despierta al primer hilo de la cola. Un símil para entenderlo mejor. Una mesa en la que hay gente que pone caramelos y gente que los recoge. La gente son los hilos. Los que van a coger caramelos (hacen wait()) se ponen en una cola delante de la mesa, cogen un caramelo y se van. Si no hay caramelos, esperan que los haya y forman una cola. Otras personas ponen un caramelo en la mesa (hacen notify()). El número de caramelos en la mesa es el contador que mencionabamos. Modelo Productor/Consumidor Nuevamente y como comentamos en sincronizar hilos, es buena costumbre de orientación a objetos "ocultar" el tema de la sincronización a los hilos, de forma que no dependamos de que el programador se acuerde de implementar su hilo correctamente (llamada a synchronized y llamada a wait() y notify()). Para ello, es práctica habitual meter la lista de datos dentro de una clase y poner dos métodos synchronized para añadir y recoger datos, con el wait() y el notify() dentro. El código para esta clase que hace todo esto puede ser así 9
10 public class MiListaSincronizada private LinkedList lista = new LinkedList(); public synchronized void adddato(object dato) lista.add(dato); lista.notify(); public synchronized Object getdato() if (lista.size()==0) wait(); Object dato = lista.get(0); lista.remove(0); return dato; Listo, nuestros hilos ya no deben preocuparse de nada. El hilo que espera por los datos hace esto Object dato = listasincronizada.getdato(); y eso se quedará bloqueado hasta que haya algún dato disponible. Mientras, el hilo que guarda datos sólo tiene que hacer esto otro listasincronizada.adddato(dato); Interrumpir un hilo Comentamos antes que es posible que un hilo salga del wait() sin necesidad de que nadie haga notify(). Esta situación se da cuando se produce algún tipo de interrupción. En el caso de java es fácil provocar una interrupción llamando al método interrupt() del hilo. Por ejemplo, si el hilolector está bloqueado en un wait() esperando un dato, podemos interrumpirle con hilolector.interrupt(); El hilolector saldrá del wait() y se encontrará con que no hay datos en la lista. Sabrá que alguien le ha interrumpido y hará lo que tenga que hacer en ese caso. 10
11 Por ejemplo, imagina que tenemos un hilo lectorsocket pendiente de un socket (una conexión con otro programa en otro ordenador a través de red) que lee datos que llegan del otro programa y los mete en la listasincronizada. Imagina ahora un hilo lectordatos que está leyendo esos datos de la listasincronizada y tratándolos. Qué pasa si el socket se cierra?. Imagina que nuestro programa decide cerrar la conexión (socket) con el otro programa en red porque se han enfadado y ya no piensan hablarse nunca más. Una vez cerrada la conexión, el hilo lectorsocket puede interrumpir al hilo lectordatos. Este, al ver que ha salido del wait() y que no hay datos disponibles, puede suponer que se ha cerrado la conexión y terminar. El código del hilo lectordatos puede ser así while (true) if (listasincronizada.size() == 0) wait(); // Debemos comprobar que efectivamente hay datos. if (listasincronizada.size() > 0) // Hay datos, los tratamos Object dato=listasincronizada.get(0); listasincronizada.remove(0); // tratar el dato. else // No hay, datos se debe haber cerrado la conexion // así que nos salimos. return; y el hilo lectorsocket, cuando cierra la conexión, debe hacer socket.close(); lectordatos.interrupt(); 11
Concurrencia. Primitivas IPC con bloqueo
Concurrencia Primitivas IPC con bloqueo Primitivas de IPC con bloqueo La solución de Peterson es correcta, pero tiene el defecto de requerir espera ocupada: Cuando un proceso quiere entrar en su región
Más detallesObjetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.
Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Uso de Ficheros Todas las estructuras de datos vistas hasta ahora utilizan la
Más detallesObject 1. Threads en Java
Object 1 Threads en Java Introducción En este artículo voy a explicar cómo se usan los threads en Java (también traducidos como "hilos de ejecución"). La intención no es solamente explicar cuáles son las
Más detallesGESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)
APRENDERAPROGRAMAR.COM GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado I
Más detallesEn cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.
Arboles-B Características Los árboles-b son árboles de búsqueda. La "B" probablemente se debe a que el algoritmo fue desarrollado por "Rudolf Bayer" y "Eduard M. McCreight", que trabajan para la empresa
Más detallesPrograma diseñado y creado por 2014 - Art-Tronic Promotora Audiovisual, S.L.
Manual de Usuario Programa diseñado y creado por Contenido 1. Acceso al programa... 3 2. Opciones del programa... 3 3. Inicio... 4 4. Empresa... 4 4.2. Impuestos... 5 4.3. Series de facturación... 5 4.4.
Más detallesModulo 1 El lenguaje Java
Modulo 1 El lenguaje Java 13 - Codificación en Java Una de las grandes diferencias entre Java y Pascal en cuando a la codificación es que Java se trata de un lenguaje de los llamados case sensitive Esto
Más detallesMANUAL PARA GESTIÓN DE INCIDENCIAS INFORMÁTICAS
MANUAL PARA GESTIÓN DE INCIDENCIAS INFORMÁTICAS En este manual aprenderemos a introducir un Ticket de Soporte (Incidencia Informática) y ver todo el proceso hasta que se resuelve. Para poder escribir Tickets
Más detallesUNIDAD 1. LOS NÚMEROS ENTEROS.
UNIDAD 1. LOS NÚMEROS ENTEROS. Al final deberás haber aprendido... Interpretar y expresar números enteros. Representar números enteros en la recta numérica. Comparar y ordenar números enteros. Realizar
Más detallesCurso Internet Básico - Aularagon
Antes de empezar es necesario que tengas claro algunas cosas: para configurar esta cuenta de correo, debes saber que el POP y el SMTP en este caso son mail.aragon.es; esta cuenta de correo hay que solicitarla
Más detallesPara trabajar este tema vamos a situarlo un poco más en el lenguaje común:
Curso de Internet a distancia para sacerdotes, religiosos y religiosas Material de apoyo para las teleclases - Viernes,18 de noviembre2011 Vea los vídeos resúmenes en: www.medioscan.es y www.teleiglesia.es
Más detallesCONCEPTOS BASICOS. Febrero 2003 Página - 1/10
CONCEPTOS BASICOS Febrero 2003 Página - 1/10 EL ESCRITORIO DE WINDOWS Se conoce como escritorio la zona habitual de trabajo con windows, cuando iniciamos windows entramos directamente dentro del escritorio,
Más detallesUTILIZACIÓN DE UNA CUENTA DE CORREO ELECTRÓNICO (NUEVO) Acceso al correo electrónico
Acceso al correo electrónico Pasamos ahora a lo que sería usar la cuenta de correo que nos hicimos en la clase anterior. Lo primero que hacemos es entrar en la página web de Yahoo y localizar el icono
Más detalles15 CORREO WEB CORREO WEB
CORREO WEB Anteriormente Hemos visto cómo funciona el correo electrónico, y cómo necesitábamos tener un programa cliente (Outlook Express) para gestionar los mensajes de correo electrónico. Sin embargo,
Más detallesCOMO CREAR UNA PÁGINA WEB 2-INTRODUCCIÓN A DREAWEAVER
2011 2012 COMO CREAR UNA PÁGINA WEB 2-INTRODUCCIÓN A DREAWEAVER WWW.FAUBELL.COM vicente@faubell.com Hasta ahora hemos visto una pequeña introducción a la creación de las páginas web. No te preocupes por
Más detallesAdaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: 93.410.92.92 Fax.: 93.419.86.49 e-mail:atcliente@websie.
Adaptación al NPGC Introducción Nexus 620, ya recoge el Nuevo Plan General Contable, que entrará en vigor el 1 de Enero de 2008. Este documento mostrará que debemos hacer a partir de esa fecha, según nuestra
Más detallesCómo creo las bandejas del Registro de Entrada /Salida y de Gestión de Expedientes?
Preguntas frecuentes Cómo creo las bandejas del Registro de Entrada /Salida y de Gestión de Expedientes? Atención! Esta opción es de configuración y solamente la prodrá realizar el administrador de la
Más detallesEn términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas.
1 de 18 Inicio Qué es un foro En términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas. En el campus virtual, el foro es una herramienta
Más detallesPROGRAMACIÓN EN JAVA
SISTEMAS INFORMÁTICOS INDUSTRIALES curso 2007-2008 PROGRAMACIÓN EN JAVA PRÁCTICA 3: Comunicación entre tareas. Modelo productor / consumidor. Objetivos Implementar una aplicación en Java en la que existan
Más detallesPráctica GESTIÓN Y UTILIZACIÓN DE REDES LOCALES. Curso 2001/2002. TCP/IP: protocolo TCP
Práctica 9 GESTIÓN Y UTILIZACIÓN DE REDES LOCALES Curso 2001/2002 TCP/IP: protocolo TCP Introducción Como se ha comentado en la práctica anterior, el protocolo UDP es muy sencillo de implementar, pero
Más detallesSitios remotos. Configurar un Sitio Remoto
Sitios remotos Definir un sitio remoto significa establecer una configuración de modo que Dreamweaver sea capaz de comunicarse directamente con un servidor en Internet (por eso se llama remoto) y así poder
Más detalles1 HILOS (THREADS) EN JAVA
1 HILOS (THREADS) EN JAVA 1.1QUÉ ES UN THREAD La Máquina Virtual Java (JVM) es un sistema multihilo. Es decir, es capaz de ejecutar varios hilos de ejecución simultáneamente. La JVM gestiona todos los
Más detallesControl, Instrumentación e Instalaciones Ingeniería Ambiental
Control, Instrumentación e Instalaciones Ingeniería Ambiental TEMA 3. LABORATORIO. El Autómata Siemens S7-300. Programación Básica Alfredo Rosado Curso Académico 2010-2011 Control, Instrumentación e Instalaciones.
Más detallesMANUAL BASICO DE WEBEX
MANUAL BASICO DE WEBEX Webex es un servicio de web conferencias y soluciones de colaboración, lo que significa que nos permite crear una conferencia por internet en la cual además de vernos los unos a
Más detallesTPVFÁCIL. Caja Real. Definiciones.
TPVFÁCIL. Caja Real. TPVFÁCIL incluye desde la versión 3.3.2 la posibilidad de manejar dos cajas, la Caja Real y la Caja normal. La idea es esconder los datos de caja que pueden alcanzar los usuarios no
Más detallesCapítulo 0. Introducción.
Capítulo 0. Introducción. Bueno, por fin está aquí el esperado (espero!!) Capítulo Cero del Tutorial de Assembler. En él estableceremos algunos conceptos que nos serán de utilidad a lo largo del Tutorial.
Más detallesEl control de la tesorería consiste en gestionar desde la aplicación los cobros y pagos generados a partir de las facturas de venta y de compra.
Gestión de la tesorería y del riesgo El control de la tesorería consiste en gestionar desde la aplicación los cobros y pagos generados a partir de las facturas de venta y de compra. En este manual nos
Más detallesWeb Publishing con LabVIEW (I)
1 Web Publishing con LabVIEW (I) Una de las herramientas más útiles de LabVIEW es el Web Publishing. Gracias a esta utilidad podemos subir nuestras creaciones a Internet, para mostrar por ejemplo resultados
Más detallesTransacciones y bloqueos en SQL-Server
Transacciones y bloqueos en SQL-Server (Información para el uso desde Axapta) Introducción En este documento vamos a intentar explicar cuatro conceptos básicos acerca de las transacciones y los bloqueos
Más detallesUna vez que tengamos el padrón de un determinado tributo con todos sus datos actualizados, podemos generar los recibos de ese padrón.
11. RECIBOS. Desde esta opción de Menú vamos a completar el proceso de gestión de los diferentes tributos, generando recibos, informes de situación, impresiones, etc. 11.1. GENERACIÓN DE RECIBOS. Una vez
Más detallesPruebas de unidad con JUnit
Pruebas de unidad con JUnit Cuando se implementa software, resulta recomendable comprobar que el código que hemos escrito funciona correctamente. Para ello, implementamos pruebas que verifican que nuestro
Más detallesIntroducción... 4. Cómo empezar a monetizar mi blog?... 7. Porqué son tan interesantes los ingresos por sistemas de afiliados?...
Aaaaa Contenido Introducción... 4 Cómo empezar a monetizar mi blog?... 7 Porqué son tan interesantes los ingresos por sistemas de afiliados?... 10 Cómo se pueden generar ingresos con un blog usando la
Más detallesMANUAL DE AYUDA MODULO TALLAS Y COLORES
MANUAL DE AYUDA MODULO TALLAS Y COLORES Fecha última revisión: Enero 2010 Índice TALLAS Y COLORES... 3 1. Introducción... 3 CONFIGURACIÓN PARÁMETROS TC (Tallas y Colores)... 3 2. Módulos Visibles... 3
Más detallesGuía de uso del Cloud Datacenter de acens
guíasdeuso Guía de uso del Cloud Datacenter de Calle San Rafael, 14 28108 Alcobendas (Madrid) 902 90 10 20 www..com Introducción Un Data Center o centro de datos físico es un espacio utilizado para alojar
Más detallesVamos a crear nuestro primer juego en el que tendremos que coger la comida que esta protegida por los gatos
Atrapa la tarta Vamos a crear nuestro primer juego en el que tendremos que coger la comida que esta protegida por los gatos Instrucciones (Controla el movimiento del ratón con las teclas flecha derecha,
Más detallesLas materias que más te gustaban en el liceo cuales eran? Y las que menos te gustaban?
ENTREVISTA A LIC. EN NEGOCIOS INTERNACIONALES Profesión: Consultor y Docente. Titulo Obtenido: Lic. En Negocios Internacionales e Integración. Edad: 35 años. Años de Egresado: 5 años. Lugar de Egreso:
Más detallesCierre y Apertura de ejercicio. Gestión - Contabilidad
Cierre y Apertura de ejercicio. Gestión - Contabilidad Cliente : Cooperativa Madrileña de Ferreteros, soc. coop. Referencia : I-3-PC-02 / 000041 Asunto : Cierre y apertura de ejercicio. Gestión Contabilidad
Más detallesCapitulo 6. Como echarle el muerto a alguien.
Capitulo 6 Como echarle el muerto a alguien. Una de las cosas más importantes en una programación es tener un sistema que permite echarle el muerto a alguien. Dicho de manera elegante, el sistema debe
Más detallesHostaliawhitepapers. Las ventajas de los Servidores dedicados. www.hostalia.com. Cardenal Gardoki, 1 48008 BILBAO (Vizcaya) Teléfono: 902 012 199
Las ventajas de los Servidores dedicados Cardenal Gardoki, 1 48008 BILBAO (Vizcaya) Teléfono: 902 012 199 www.hostalia.com A la hora de poner en marcha una aplicación web debemos contratar un servicio
Más detallesGestión de Retales WhitePaper Noviembre de 2009
Gestión de Retales WhitePaper Noviembre de 2009 Contenidos 1. Introducción 3 2. Almacén de retales 4 3. Propiedades de los materiales 6 4. Alta de retales 8 5. Utilización de retales en un lote de producción
Más detallesOptimizar base de datos WordPress
Optimizar base de datos WordPress Cardenal Gardoki, 1 48008 BILBAO (Vizcaya) Teléfono: 902 012 199 www.hostalia.com WordPress se ha convertido en uno de los CMS más utilizados en todo el mundo. Su robustez,
Más detallesBenemérita Universidad Autónoma del Estado de Puebla
Benemérita Universidad Autónoma del Estado de Puebla Facultad de Cs. De la Computación Programación Concurrente y Paralela Práctica de Laboratorio No. 5 Profr: María del Carmen Cerón Garnica Alumno: Roberto
Más detallesGimp - Segunda parte. En qué formatos puede grabar GIMP mi imagen? Guardar una imagen
Gimp - Segunda parte En qué formatos puede grabar GIMP mi imagen? Gimp puede guardar en su propio formato que es.xcf y mantendrá de esta forma las capas que hayamos añadido. Además puede exportar la imagen
Más detallesActivación de un Escritorio Remoto
Activación de un Escritorio Remoto La activación de un Escritorio Remoto se realiza en dos fases, en la primera se habilita a un Usuario de un ordenador para que pueda admitir una conexión remota, la segunda
Más detallesMANUAL DE AYUDA. SAT Móvil (Movilidad del Servicio Técnico)
MANUAL DE AYUDA SAT Móvil (Movilidad del Servicio Técnico) Fecha última revisión: Abril 2015 INDICE DE CONTENIDOS INTRODUCCION SAT Móvil... 3 CONFIGURACIONES PREVIAS EN GOTELGEST.NET... 4 1. INSTALACIÓN
Más detallesManual de NVU Capítulo 4: Los enlaces
Manual de NVU Capítulo 4: Los enlaces Pág. 1 Manual de NVU Capítulo 4: Los enlaces Reconocimiento-NoComercial-CompartirIgual 2.5 España Realizado por: Julio Ruiz Palmero (Universidad de Málaga) julioruiz@uma.es
Más detallesMINI MANUAL PARA CREAR FORMULARIOS CON PHP Marzo 2007
MINI MANUAL PARA CREAR FORMULARIOS CON PHP Marzo 2007 Servicio de Informática y Comunicaciones Para poder diseñar un formulario y que éste nos envíe los resultados a nuestro correo electrónico, necesitamos
Más detallesManual de usuario. Autor: Oriol Borrás Gené. Oriol.borras@upm.es
Manual de usuario Autor: Oriol Borrás Gené Oriol.borras@upm.es Índice 1. Qué es Pinterest 2. Crear una cuenta 3. Entorno o Inicio o Estructura de un pin o Perfiles 4. Cómo trabajar con Pinterest o Crear
Más detallesL204 DVD-ROM 1 Audio transcripts: Unidad 1
L204 DVD-ROM 1 Audio transcripts: Unidad 1 Tema 1 (Ruido de fondo en un bar) Carmen Carmen. Entrevistadora Carmen, y por qué decidiste inscribirte en estos cursos de la UNED? Carmen Pues porque es una
Más detallesGUÍA DE USUARIO: GOOGLE DRIVE
GUÍA DE USUARIO: GOOGLE DRIVE Google Drive es una herramienta telemática de la web 2.0 que permite el trabajo virtual de forma colaborativa. En Google Drive podemos encontrar una barra de navegación en
Más detallesGuía para el tratamiento en Allegro de recibos para centros no pertenecientes a la Generalitat Valenciana.
Guía para el tratamiento en Allegro de recibos para centros no pertenecientes a la Generalitat Valenciana. Esta guía muestra como proceder en la configuración y posterior uso de la aplicación Allegro en
Más detallesComo verás pone Microsoft Office y si te colocas sobre esta línea debería salir:
:: Introducción: Microsoft dispone de un conjunto de herramientas llamado Office que se compone de todo lo necesario para resolver cuantos problemas se presenten en los trabajos propios de cualquier usuario
Más detallesEl Supermercado. Hoy tengo que ir yo solo al supermercado a comprar un kilo de. . Voy a pasármelo bien en el supermercado.
El Supermercado Hoy tengo que ir yo solo al supermercado a comprar un kilo de manzanas.. Voy a pasármelo bien en el supermercado. Eso está bien. Existen muchas clases de manzanas. Las hay rojas, amarillas,
Más detallesHostaliawhitepapers. Usar Plesk para, poner en marcha nuestro dominio.
Usar Plesk para, poner en marcha nuestro dominio. Cardenal Gardoki, 1 48008 BILBAO (Vizcaya) Teléfono: 902 012 199 www.hostalia.com Dominio y alojamiento web Registrar un dominio no es sinónimo de tener
Más detallesCreación de Funciones de Conducción
Creación de Funciones de Conducción Requerimientos Para el desarrollo de esta actividad se requiere que: Contemos con un robot BoeBot armado con placa Arduino. Repetición En estos momentos habremos notado
Más detallesGestión del Stock 1. Creación de referencias 2. Dar de alta a mercancía y proveedores 3. Añadir o eliminar artículos de albarán 4. Etiquetado 5. Consulta de existencias de stock, tipo de proveedor, precio
Más detallesManual de uso de la plataforma para monitores. CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib
Manual de uso de la plataforma para monitores CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib [Manual de uso de la plataforma para monitores] 1. Licencia Autor del documento: Centro de Apoyo Tecnológico
Más detallesGESTINLIB GESTIÓN PARA LIBRERÍAS, PAPELERÍAS Y KIOSCOS DESCRIPCIÓN DEL MÓDULO DE KIOSCOS
GESTINLIB GESTIÓN PARA LIBRERÍAS, PAPELERÍAS Y KIOSCOS DESCRIPCIÓN DEL MÓDULO DE KIOSCOS 1.- PLANTILLA DE PUBLICACIONES En este maestro crearemos la publicación base sobre la cual el programa generará
Más detallesCuestionario: Programación en C y máscaras (II)
Este documento es un autotest de ayuda enmarcado en la asignatura Informática Industrial y corresponde al tema Programación en C, pero es abierto y puede servir para entender el funcionamiento básico de
Más detallesScripts de arranque. Pablo Sanz Mercado.
Scripts de arranque. Pablo Sanz Mercado. 1 1. Configuración y comandos básicos. Los niveles de ejecución en Linux son las diferentes formas en las que podemos encontrar un sistema operativo Linux. Cuando
Más detallesMANUAL DEL PROGRAMA DE ASESORAMIENTO (Asesores) Navegador y limpiar caché/cookies...2 Acceso al programa de Asesoramiento... 7
MANUAL DEL PROGRAMA DE ASESORAMIENTO (Asesores) Índice Pasos previos a la visualización del programa: Navegador y limpiar caché/cookies...2 Acceso al programa de Asesoramiento... 7 Conceptos e información
Más detallesIptables, herramienta para controlar el tráfico de un servidor
Iptables, herramienta para controlar el tráfico de un servidor La seguridad es punto muy importante a tener en cuenta en cualquier organización de ahí que sea fundamental hacer uso de aquellos mecanismos
Más detallesIntroducción a la programación orientada a objetos
Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases 3. El tipo Struct 4. Diferencias entre Class y Struct 5. Pilares de la Programación
Más detallesIntroducción a la Programación Orientada a Objetos
Introducción a la Programación Orientada a Objetos El paradigma imperativo. En un programa se tienen una serie de variables con las cuales operamos y modificamos mediante sentencias y funciones para producir
Más detallesTenemos que instalar los programas de los usuarios también (los anteriormente mencionados) y los siguientes que vamos a nombrar.
TUTORIAL INCEME Programas necesarios PC s usuarios En los ordenadores donde se va a ejecutar INCEME van hacer falta una serie de programas para su funcionamiento. Tendremos que tener los.net Framework
Más detallesLA OLA. Cinco cuentos para leer en voz alta. Autor: Antonio Pons
LA OLA Cinco cuentos para leer en voz alta. Autor: Antonio Pons Desde hace unos días cuando le tiro la pelota a Chispa, no sale corriendo a por ella para luego volver a traérmela. Los papás me han dicho
Más detallesCITRIX 4.5 - Citrix Application Streaming
1 de 39 01/12/2007 1:06 CITRIX 4.5 - Citrix Application Streaming Es la caracteristica principal de la versión 4.5 de Citrix, el Application Streaming, en este documento se explica cómo usarlo. Application
Más detallesManual Smart Sync. para profesorado
Manual Smart Sync para profesorado Índice Instalación programa profesor. Funcionamiento de la aplicación: 1. Bloqueo de los equipos. 2. Bloqueo acceso a Internet. 3. Anunciar/Atención a los alumnos con
Más detallesLa otra gran ventaja es que está vinculado con nuestra asesoría, gracias a esto se consigue:
INDICE 1. CLIENTES 1.1. Nuevo cliente 1.2. Emisión de Facturas Emitidas 1.3. Informes: 1.3.1. Mayor de clientes 1.3.2. Listado de Facturas Emitidas 2. PROVEEDORES 2.1. Nuevo Proveedor 2.2. Registro de
Más detallesEste es un ejemplo muy sencillo, un esquema de empleados que trabajan en proyectos, en una relación muchos a muchos.
28/04/2012 La teoría de la normalización va perdiendo peso con el paso de los años como herramienta de diseño de bases de datos relacionales en favor de modelos de datos más ricos en su representación,
Más detallesCapítulo 23. El encuadre terapéutico (C)
Capítulo 23 El encuadre terapéutico (C) El encuadre terapéutico es lo que hacemos, con el cliente, en la primera sesión: encuadrar la terapia. Qué comprende el encuadre? 1. Saber qué le pasa al cliente
Más detallesIntroducción a Moodle
Instituto la Américas de Nayarit Ing. Elías Portugal Luna Qué es Moodle? Moodle es una aplicación web de tipo Ambiente Educativo Virtual, un sistema de gestión de cursos, de distribución libre, que ayuda
Más detallesUnidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)
Unidad I Sistemas numéricos 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS.
Más detallesCURSO RÁPIDO DE PHOTOSHOP APLICADO AL SLOT
CURSO RÁPIDO DE PHOTOSHOP APLICADO AL SLOT Ricard Garrós http://elartedelphotoshop.blogspot.com/ & http://www.fusky.es CURSO RÁPIDO DE PHOTOSHOP APLICADO AL SLOT Aquí os traigo la tercera entrega del curso,
Más detallesEsta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro
USAR MYSQL EN PHP PHP tiene una librería de funciones nativas para conectarse a las base de datos MySQL. Por un lado reconoce la librería mysql y por otro mysqli. Se recomienda el uso de mysqli dado que
Más detallesMANUAL DE CONFIGURACIÓN CORREOS ISF.ES
MANUAL DE CONFIGURACIÓN CORREOS ISF.ES V 3.0 Grupo de Sistemas Información Ingeniería Sin Fronteras Índice de contenido 1. Introducción...3 2. Solicitud de cuentas de correo al GSI...3 3. Configuración
Más detallesInstalar protocolo, cliente o servicio nuevo. Seleccionar ubicación de red. Práctica - Compartir y conectar una carpeta
Configuración de una red con Windows Aunque existen múltiples sistemas operativos, el más utilizado en todo el mundo sigue siendo Windows de Microsoft. Por este motivo, vamos a aprender los pasos para
Más detallesSYMBALOO 1º.- QUÉ ES? 2º.-Darse de alta en Symbaloo
SYMBALOO 1º.- QUÉ ES? Symbaloo es una aplicación on-line que nos permite tener organizados nuestros enlaces de la web, accesibles en cualquier momento y poderlos compartir con otras personas. En este sentido
Más detallesEjercicio 1. Desarrollar un pequeño juego para practicar mecanografía.
Examen Curso 2001-2002. Convocatoria de Febrero Página 1 Ejercicio 1. Desarrollar un pequeño juego para practicar mecanografía. Este ejercicio se divide en dos partes con el fin de que el alumno no intente
Más detallesParsear HTML con htmlparser para Android Guillem Pérez
Parsear HTML con htmlparser para Android Guillem Pérez He escogido esta librería(http://htmlparser.sourceforge.net/) aunque no había muchos ejemplos porque la he visto realmente ligera y esta en java hay
Más detallesImpress : Programa de presentaciones de OpenOffice.
Impress : Programa de presentaciones de OpenOffice. Básicamente Impress es un programa de presentaciones proyectadas a través de diapositivas (pantallas completas) que un orador o ponente puede utilizar
Más detallesManual básico de Outlook Express
Manual básico de Outlook Express INDICE 1. Elementos básicos a. Crear un correo nuevo. b. Enviar y recibir correo. c. Direcciones. d. Buscar en correos. 2. Utilidades a. Cómo adjuntar archivos. b. Insertar
Más detallesGUIA APLICACIÓN DE SOLICITUDES POR INTERNET. Gestión de Cursos, Certificados de Aptitud Profesional y Tarjetas de Cualificación de Conductores ÍNDICE
ÍNDICE ACCESO A LA APLICACIÓN... 2 1.- HOMOLOGACIÓN DE CURSOS... 4 1.1.- INICIAR EXPEDIENTE... 4 1.2.- CONSULTA DE EXPEDIENTES... 13 1.3.- RENUNCIA A LA HOMOLOGACIÓN... 16 2.- MECÁNICA DE CURSOS... 19
Más detallesSesión 3 - Movimiento Diferencial
Sesión 3 - Movimiento Diferencial Qué aprenderemos en esta sesión? Para entender como nuestro robot se va a desplazar por cualquier superficie, debemos aprender la manera en que lo hace, por eso, en esta
Más detallesCómo mover y cambiar de tamaño zonas (versión turborresumida, ya llegará la versión completa en el
Cómo mover y cambiar de tamaño zonas (versión turborresumida, ya llegará la versión completa en el turbotutorial de LUA) Intro Lo primero que hay que saber es que LUA trabaja con identificadores, no con
Más detallesMÓDULO 3 HERRAMIENTAS EN LA NUBE: ANFIX
MÓDULO 3: TEMA 1 INTRODUCCIÓN Hemos elegido esta herramienta, por su sencillez de acceso a través de la web, es bastante fácil e intuitiva, tan sólo tienes que registrarte, confirmar tu cuenta y ya puedes
Más detallesQuieres conocer como se pone en marcha el Programa ECG. Estimulación Cognitiva Global dirigido a pacientes en fase leve, moderada o severa?
Quieres conocer como se pone en marcha el Programa ECG. Estimulación Cognitiva Global dirigido a pacientes en fase leve, moderada o severa? Lo primero presentarme para que sepas quien hay detrás de estas
Más detallesAP ERTURA/ CIERRE DE CAJA TP V GN40
AP ERTURA/ CIERRE DE CAJA TP V GN40 DIA 1. AP ERTURA DE CAJA Antes de abrir la caja debemos saber cuanto dinero tenemos físicamente en el cajón, una vez lo tengamos contado podemos abrir caja El Total
Más detallesPrograma Presupuestos de Sevillana de Informática.
Programa Presupuestos de Sevillana de Informática. Introducción. En sus inicios, el programa Presupuestos estaba pensado únicamente para escribir e imprimir presupuestos, facilitando el trabajo con un
Más detallesEscritorio remoto y VPN. Cómo conectarse desde Windows 7
Escritorio remoto y VPN. Cómo conectarse desde Windows 7 Hay ocasiones en las que es necesario conectarnos a un equipo informático situado a mucha distancia de donde nos encontramos para realizar sobre
Más detallesGestión de Subtotales en Documentos de Venta WhitePaper Febrero de 2007
Gestión de Subtotales en Documentos de Venta WhitePaper Febrero de 2007 Contenidos 1. Propósito 3 2. Introducción 4 3. Plantilla de subtotales 5 4. Gestión de subtotales 7 Gestión de Subtotales en Documentos
Más detalles3.1 Alta de clientes.
3. GESTIÓN DE CLIENTES. Hasta el momento hemos estudiado operaciones de venta al contado, en las que no hemos introducido datos sobre el cliente. Puede ocurrir que queramos personalizar una venta, es decir,
Más detallesEXCEPCIONES EN JAVA. Las sentencias que tratan las excepciones son try y catch. La sintaxis es:
EXCEPCIONES EN JAVA Uno de los problemas más importantes al escribir aplicaciones es el tratamiento de los errores. Errores no previstos que distorsionan la ejecución del programa. Las excepciones de Java
Más detallesSi quieres saber cuál es tu IP, escribe en Google: cuál es mi IP. Escribe en el buscador Google: cuál es mi ip
1 Curso de Internet a distancia para sacerdotes, religiosos y religiosas Material de apoyo para las teleclases - Viernes, 2 de maroz 2012 Vea los vídeos resúmenes en: www.medioscan.es y www.teleiglesia.es
Más detallesAcceder a correo de 1000tentaciones.com a través de web.
Acceder a correo de 1000tentaciones.com a través de web. 1.- Accedemos a la dirección webmail.1000tentaciones.com y nos aparecerá la siguiente pantalla. Los datos que debemos introducir son: Usuario: nuestra
Más detallesPorcentajes. Cajón de Ciencias. Qué es un porcentaje?
Porcentajes Qué es un porcentaje? Para empezar, qué me están preguntando cuando me piden que calcule el tanto por ciento de un número? "Porcentaje" quiere decir "de cada 100, cojo tanto". Por ejemplo,
Más detallespara jóvenes programadores
Manual de Kompozer para jóvenes programadores Por Angel Pablo Hinojosa Gutiérrez Para la Oficina de Software Libre de la Universidad de Granada Copyright 2010: Angel Pablo Hinojosa Gutiérrez El Manual
Más detallesInternet Information Server
Internet Information Server Internet Information Server (IIS) es el servidor de páginas web avanzado de la plataforma Windows. Se distribuye gratuitamente junto con las versiones de Windows basadas en
Más detalles