• Jueves 28 de Marzo de 2024, 14:50

Autor Tema:  Hilos  (Leído 8021 veces)

kalita

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Hilos
« en: Lunes 15 de Noviembre de 2004, 22:57 »
0
Se pueden manejar hilos en Borland c++ 3.1

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Hilos
« Respuesta #1 en: Martes 16 de Noviembre de 2004, 00:17 »
0
No que yo sepa.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

patitofeo

  • Miembro MUY activo
  • ***
  • Mensajes: 145
    • Ver Perfil
Re: Hilos
« Respuesta #2 en: Martes 16 de Noviembre de 2004, 12:43 »
0
:hola:

Probablemente me equivoque a si que si lo hago por favor corrijanme.

 :kicking:

Creo que los hilos es algo intrinseco al sistema operativo. Es decir los hilos es una forma que el sistema tiene de conseguir concurrencia ("igual" que los procesos). Esa concurrencia se gestiona mediante alguna libreria que hace las llamadas al kernell para que realice el cambio de contexto. Imagino que existan librerias que gestionen hilos para cualquier SO y compilador (o pa la mayoria).

Yo nunca trabaje con hilos en Windows (Los vi un poco por encima en un curso de Java) pero en Linux hay muchas librerias. La libreria 'pthread' del paquete 'rt' es muy sencilla.

De todos modos, como ya os he dicho solo he trabajado con hilos (threads) en GNU/Linux y con el compilador GCC.

Espero haber ayudado.

Un saludo

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Hilos
« Respuesta #3 en: Miércoles 17 de Noviembre de 2004, 05:08 »
0
no mucho..
realmente el borland no tiene nada que te ayude a usar los hilos... tal vez usaqndo la api de windows.. pero no lo puedo asegurar.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

antony_soluciones

  • Miembro MUY activo
  • ***
  • Mensajes: 222
    • Ver Perfil
Re: Hilos
« Respuesta #4 en: Miércoles 17 de Noviembre de 2004, 22:43 »
0
La función para bifurcar a otros procesos se llama fork y en c si se pueden trabajar hilos, por que los hilos son subprocesos de un proceso padre, lo que no se puede es trabajar con dos procesos padres en el mismo tiempo logico, en internet se consigue una libreria llamada Thread.h a mi me sirvió y espero que a usted tambien...
[size=109]Antony Hernan Delgado Solano. @antonyDelSol en twitter[/size]

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Hilos
« Respuesta #5 en: Miércoles 17 de Noviembre de 2004, 23:08 »
0
Citar
Se pueden manejar hilos en Borland c++ 3.1
....

por otro lado Thread.h no es una libreria solo uno de los encabezados que usa la libreria Thread.

Asumo tambien que si usa borland no existe fork, ya quye esa version de borlan es para sistemas DOS y compatibles, los cuales no cumplen el standart POXIS que por supuesto no aplica para esta familia de OS.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Mr. Anderson

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
Re: Hilos
« Respuesta #6 en: Jueves 18 de Noviembre de 2004, 01:21 »
0
Bueno comentario aparte de este tema, la funcion kbhit me parece una funcion que puede formar parte de un hilo, deben existir mas funciones.
Hasta ahora no he visto nada mas, pero en programacion nada es absoluto y siempre se busca la manera de..
Espero mas informacion de este tema muy interesante.
Pero pasense manuales o hipervinculos puessss...

 :lightsabre:

antony_soluciones

  • Miembro MUY activo
  • ***
  • Mensajes: 222
    • Ver Perfil
Re: Hilos
« Respuesta #7 en: Jueves 18 de Noviembre de 2004, 21:15 »
0
Hey juank... tiene mucha razon, que pena es que no habia leido bien, que pena con ustedes, yo he trabajado hilos pero en gcc y me ha funcionado todo lo que he querido hacer.... la pagina que les muestro a continuaciòn es muy buena para aprender hilos en c++ para linux o unix.... espero les sirva

http://www.geocities.com/chuidiang/proceso...cesoshilos.html

Espero haber ayudado y no haber confundido... asta luego
[size=109]Antony Hernan Delgado Solano. @antonyDelSol en twitter[/size]

Haggen

  • Miembro activo
  • **
  • Mensajes: 88
  • Nacionalidad: mx
    • Ver Perfil
    • Mis proyectos
Re: Hilos
« Respuesta #8 en: Miércoles 1 de Diciembre de 2004, 06:36 »
0
bueno, dicen que no se pueden crear hilos en borland, como podría simular esto en el borland para ms-dos?, hay alguna manera de ponerle una pausa a un procedimiento y saltar a otro para luego reanudarlo?, a la mejor con colas o algo así pero es solo una propuesta o que se puede hacer?, ya que si algun fragmento se quedara "ciclado" arruinaría todo el esquema  <_< .
 por otro lado, una duda...que función puedo usar para leer datos desde el teclado, pero darle un tiempo al usuario en el cual si no responde se asuma un valor predeterminado, las funciones getch y demás clásicas se quedan eternamente esperando respuesta y no se me ha ocurrido como hacerle.

Gracias    :hola:

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Hilos
« Respuesta #9 en: Miércoles 1 de Diciembre de 2004, 14:27 »
0
Existen algunas funciones para saber si han ocurrido algunos eventos, ej: si se ha presionada una tecla, entonces recién llamas al getCh. Por lo demas tienes un ciclo maestro que coordina todo.

En DOS lo que puedes utilizar son interrupciones: presionas una tecla, mueves el ratón, etc: generas una interrupción, se ejecuta el código de la interrupción y luego continua el programa interrumpido.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Hilos
« Respuesta #10 en: Miércoles 1 de Diciembre de 2004, 15:44 »
0
Tal como lo dice aAmilus,

pero Haggen no si estes equivocado pero lo que plantesas suen a a uso de interrupciones y no de hilos, por lo menos no es un caso tipico para el uso de hilos.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Haggen

  • Miembro activo
  • **
  • Mensajes: 88
  • Nacionalidad: mx
    • Ver Perfil
    • Mis proyectos
Re: Hilos
« Respuesta #11 en: Miércoles 1 de Diciembre de 2004, 16:31 »
0
ok, voy a buscar entonces información de ese tema, gracias.  :smartass:

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Hilos
« Respuesta #12 en: Domingo 5 de Diciembre de 2004, 23:54 »
0
Hola a todos, hacia mucho tiempo que no posteaba...

Los hilos se gestionan en windows mediante MSVC/C++, a través de la librería process.h :
_beginthreadex(): lanza un hilo: una funcion de tipo unsigned int __stdcall "nombre_hilo" ()
_endthreadex():finaliza el hilo

Una de las cosas mas interesante es que _beginthreadex recibe como parametro una opcion donde se le puede indicar que el proceso comenzará suspendido: CREATE_SUSPENDED, pudiendose activar luego con una llamada a la funcion ResumeThread().
Caben destacar muchas mas funciones como:
CreateThread(), (windows.h)(que es igual al _beginthreadex de antes dando peores resultados en visual C).
GetThreadPriority(), SetThreadPriority(), GetThreadPriorityBoost() y SetThreadPriorityBoost() que permiten ajustar la prioridad de nuestro hilo.
SuspendThread(), suspende el hilo y lo deja "dormido"
ResumeThread(), reanuda la ejecucion del hilo.
ExitThread(), funcion a la que debe llamar todo hilo cuando termina para indicar que ha terminado..
TerminateThread(), mata a un hilo desde otro a lo bestia.... cuando no hay otra posibilidad.
Para esperar a que un hilo finalice podemos llamar a la funcion WaitForSingleObject() pasandole el HANDLE del hilo creado y el tiempo a esperar.

Para comunicacion entre procesos lo mas sencillo es usar eventos:
CreateEvent() , crea un evento con un nombre, puede crearse para que esté desactivado al principio o no y para que el reset sea manual o debido a algo.
OpenEvent(), abre un evento ya creado (normalmente desde otra aplicacion a la que ha creado el evento).
SetEvent(), activa un evento.
ResetEvent(), desactiva un evento.
PulseEvent(), activa un evento, activa todas las tareas que estaban a la espera y lo resetea de nuevo.
Para esperar a un evento se usan las funciones:
WaitForSingleObject(), espera a un solo evento
WaitForMultipleObjects(), espera a varios eventos.
Con estas dos funciones puedes detener uno de los hilos y dejarlo a la espera de que el otro active un evento.

Una funcion muy importante que siempre se me olvida:
CloseHandle(), para cerrar todos los descriptores, ya sean de los hilos como de los eventos.

En fin con todo esto te debiera servir para la ejecución de hilos bajo windows, de todas formas para comunicar hilos no es necesario que uses eventos, pues todos comparten el mismo espacio de memoria (siempre que se lancen desde el mismo proceso) y por tanto podrías usar vbles globales o incluso direcciones de memoria para la comunicación entre hilos, no confundir con la pila dado que cada hilo tiene su propia pila y por tanto las vbles locales son locales al hilo, ahora bien se pueden pasar por referencia todas las vbles que se quieran.  

Se puede, por ejemplo, usar una vble global iniciada a 0 y esperar a que uno de los hilos lo ponga a uno para seguir ejecutando.  OJO, son hilos y se ejecutan en paralelo hay que tener cuidado pues un evento deja al hilo muerto esperando a que se active, NO CONSUME CPU, si se usan vbles globales no se deben hacer bucles a la espera de que una vble se active sin incluir dentro un Sleep() para no consumir recursos innecesarios.

En fin, esto es un poco de lo que sé sobre hilos bajo windows, yo programo con el Visual Studio de Microsoft, teoricamente las funciones debieran poderse usar bajo cualquier compilador, pero no lo sé, igual conociendo el nombre de las funciones puedes buscar algo en Borland....

Bueno espero que sirva de ayuda a alguien al menos...

Un saludo a todos!!
No hay tonto más molesto que el ingenioso.

Haggen

  • Miembro activo
  • **
  • Mensajes: 88
  • Nacionalidad: mx
    • Ver Perfil
    • Mis proyectos
Re: Hilos
« Respuesta #13 en: Lunes 6 de Diciembre de 2004, 17:30 »
0
ahhh ok, bueno seguiré buscando a ver si encuentro algo para el borland ( :unsure: ), por otro lado ya resolví el problema de que si el usuario no metia algo por el teclado después de un tiempo el programa continuara y metiera valores predeterminados, algo así como el menú de inicio de windows, ya ven que si no elijen una opción de arranque en unos 30 segundos (creo) continua con la opción que este marcada (aunque no hallamos presionado ENTER).
 Mi caso fué más simple, lo unico que quería hacer era poner un letrero de "CARGANDO..." y que si el usuario presionaba una tecla en ese momento pues el sistema hiciera algo, en caso de que no continuara adelante. Lo que hice fué poner un sleep (por 3 segundos) y luego ver con la función kbhit (sorry, no me se el nombre de memoria, es nueva para mi, así que no se si esté bien escrita  :rolleyes: ) para detectar si se presionó alguna tecla o no, si se presionó alguna tecla la leo con la bios (una rutina que me encontré por ahí para leer el estado del teclado) y detecto cual fué, si no hubo nada continúo adelante y ya funcionó bastante bien  B) .