• Martes 7 de Mayo de 2024, 23:01

Autor Tema:  Hilo Corriendo Por Detras Del Hilo Primario  (Leído 1636 veces)

dietotten

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Hilo Corriendo Por Detras Del Hilo Primario
« en: Jueves 19 de Abril de 2007, 20:02 »
0
Hola que tal! estuve buscando respuesta por el foro a mi problema pero no la encontre... trata de lo siguiente, estoy tratando de crear un hilo en c (puro) que trabaje por detras del proceso principal, es decir que no tenga que esperar a que el hilo termine(waitformultipleobjets()) para poder continuar corriendo en el main, por dar un ejemplo. Trabajo en win32 visual c.
Espero que alguien pueda ayudarme o guiarme un poco hacia la solucion. Muchas gracias de antemano... espero sus respuestas!!!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Hilo Corriendo Por Detras Del Hilo Primario
« Respuesta #1 en: Jueves 19 de Abril de 2007, 21:11 »
0
Podes usar CreateThread de la API de Windows.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Hilo Corriendo Por Detras Del Hilo Primario
« Respuesta #2 en: Jueves 19 de Abril de 2007, 21:38 »
0
si estas en UNIX ( cosa que dudo) puedes utilizar PTHREADS
pthread_create
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Hilo Corriendo Por Detras Del Hilo Primario
« Respuesta #3 en: Jueves 19 de Abril de 2007, 21:39 »
0
Trabajo en win32 visual c.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Hilo Corriendo Por Detras Del Hilo Primario
« Respuesta #4 en: Jueves 19 de Abril de 2007, 21:40 »
0
Cita de: "Eternal Idol"
Trabajo en win32 visual c.
Te felicito.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Hilo Corriendo Por Detras Del Hilo Primario
« Respuesta #5 en: Jueves 19 de Abril de 2007, 21:43 »
0
Cita de: "JuanK"
Te felicito.
Muchas gracias, a ver si lees todos los mensajes alguna vez y si no es mucho pedir los entendes.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

dietotten

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Hilo Corriendo Por Detras Del Hilo Primario
« Respuesta #6 en: Jueves 19 de Abril de 2007, 22:24 »
0
Cita de: "Eternal Idol"
Podes usar CreateThread de la API de Windows.
Gracias por responder... mira el tema es que estoy usando esa api windows pero para que quede mi caso representado de mejor manera aca va el codigo...
Código: Text
  1. void main()
  2. {
  3.       HANDLE hThread1;
  4.       DWORD dwGenericThread;
  5.       char lszThreadParam1[3];
  6.  
  7.       strcpy(lszThreadParam1,"3");
  8.       hThread1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)StartThread,&lszThreadParam1,0,&dwGenericThread);
  9.       if(hThread1 == NULL)
  10.       {
  11.             DWORD dwError = GetLastError();
  12.             printf("SCM:Error in Creating thread %d \n",dwError);
  13.             return;
  14.        }
  15.        WaitForSingleObject(hThread1,INFINITE);
  16. /*
  17.  
  18. RESTO DE LA RUTINA
  19.  
  20. */
  21.        CloseHandle(hThread1);
  22. }
  23. DWORD WINAPI StartThread(LPVOID iValue)
  24. {
  25.       char lszParam[3];
  26.     int i, iStart;
  27.    
  28.     strcpy(lszParam,(char *)iValue);
  29.       iStart = atoi(lszParam);
  30.     for(i=iStart;i<=iStart+10;i++)
  31.     printf("%d\n",i);
  32.       return 0;
  33. }
  34.  
  35. DWORD WINAPI StartThread2(LPVOID iValue)
  36. {
  37.       char lszParam[3];
  38.     int i, iStart;
  39.    
  40.  
  41.     strcpy(lszParam,(char *)iValue);
  42.       iStart = atoi(lszParam);
  43.     for(i=iStart;i<=iStart+10;i++)
  44.     printf("%d\n",i);
  45.  
  46.       return 0;
  47. }
  48.  

El tema es que el "RESTO DE LA RUTINA" no se ejecuta hasta que no termina el hilo sus tareas... y lo que yo quiero es que sea independiente, que por un lado este el hilo corriendo a la vez que el programa continua haciendo otras cosas...
alguna idea de como hacer esto en c puro??
tks

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Hilo Corriendo Por Detras Del Hilo Primario
« Respuesta #7 en: Jueves 19 de Abril de 2007, 22:31 »
0
Cita de: "dietotten"
El tema es que el "RESTO DE LA RUTINA" no se ejecuta hasta que no termina el hilo sus tareas... y lo que yo quiero es que sea independiente, que por un lado este el hilo corriendo a la vez que el programa continua haciendo otras cosas...
alguna idea de como hacer esto en c puro??
tks
Si queres que continue no esperes ... saca el WaitForSingleObject.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

dietotten

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Hilo Corriendo Por Detras Del Hilo Primario
« Respuesta #8 en: Viernes 20 de Abril de 2007, 17:10 »
0
Eternal Idol te agradezco la ayuda que me diste para resolver mi problemilla... aunque me siento un gil por lo sencillo que era en realidad y lo mucho que me complique pero bue... tengo el paliativo de que lo habia probado antes lo de sacar el "wait..." haciendo un debug paso a paso y no funciono, pero si funciono cuando le di directamente ejecutar... (cosas raras de los productos microsoft)
Graciasss TOTALES!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Hilo Corriendo Por Detras Del Hilo Primario
« Respuesta #9 en: Viernes 20 de Abril de 2007, 18:04 »
0
Cita de: "dietotten"
Eternal Idol te agradezco la ayuda que me diste para resolver mi problemilla... aunque me siento un gil por lo sencillo que era en realidad y lo mucho que me complique pero bue... tengo el paliativo de que lo habia probado antes lo de sacar el "wait..." haciendo un debug paso a paso y no funciono, pero si funciono cuando le di directamente ejecutar... (cosas raras de los productos microsoft)
Graciasss TOTALES!
De nadas pero no creo que haya sido ningun problema de Microsoft jeje  :devil:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Hilo Corriendo Por Detras Del Hilo Primario
« Respuesta #10 en: Sábado 21 de Abril de 2007, 20:50 »
0
Mucho ojo a la hora de "debugear" cuando se trata de hilos...  Como dice Eternal no creo que se trate de un problema de Windows...  Yo que tu trabajaba con break-points, colocalos en los hilos de tal forma que el debugger se pare cuando se ejecuten, no compiles paso a paso sino que ejecuta todo el programa y utiliza los break-points para detenerlo en los hilos que te interesen... No olvides que cada hilo se ejecuta cuando el SO lo cree pertinente según una serie de reglas y mientras tu debugeas un hilo otro sigue ejecutándose en segundo plano, aunque sea parte del mismo programa...

Por otra parte, antes de finalizar tu proceso main deberías hacer una llamada a todos los hilos para que mueran antes (o realizar esa espera que mencionabas para esperar a que finalicen)... sino Windows se encargará de matarlos al finalizar el hilo principal que los llamó (pero siempre es más "profesional" cerrar todo aquello que has abierto o reservado...  :whistling: , lo mejor es mandar un evento de finalización y esperar un tiempo concreto, sino han finalizado en ese tiempo es que algo va mal y entonces simplemente los matas).

Un saludo. :lightsabre:
No hay tonto más molesto que el ingenioso.