Foros del Web » Programación para mayores de 30 ;) » C/C++ »

duda al crear procesos en windows

Estas en el tema de duda al crear procesos en windows en el foro de C/C++ en Foros del Web. Hola a todo. bueno pues estoy tratando de crear procesos padre e hijo en windows pero el problema o la duda que tengo es que ...
  #1 (permalink)  
Antiguo 13/04/2014, 21:06
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Pregunta duda al crear procesos en windows

Hola a todo.
bueno pues estoy tratando de crear procesos padre e hijo en windows pero el problema o la duda que tengo es que el programa me compila y todo pero lo que no entiendo es por que no se crea el proceso hijo y se muestra el mensaje que deberia mostrar nadamas se muestra el del proceso del padre.
bueno espero que me puedan ayudar con esta duda.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <process.h>
  3.  
  4. void mi_thread( void *params )
  5. {
  6.      printf("Proceso hijo");
  7.       _endthread();
  8. }
  9. main()
  10. {
  11.        
  12.      int padre, i;
  13.      padre = _beginthread( mi_thread, 0, NULL);  
  14.      switch (padre)
  15.     {
  16.             case -1:
  17.                     perror("no se pudo crear el proceso");
  18.             break;
  19.             case 0:
  20.                 for(i=0; i <= 10; i++)
  21.                     printf("Soy el hijo\n");
  22.             break;
  23.             default:
  24.                     for(i=0; i<=10; i++)
  25.                 printf("Soy el padre\n");
  26.             break;
  27.                    
  28.     }
  29.        
  30.      
  31. }

y bueno tabien si me podrias decir cuando seria comveniente usar los threads ya que e leido que cuando se usan hilos se puede optimizar la memoria o que tipo de programas podria realizar.
y bueno tambien si algien me quede explicar por que cuando estaba leyendo decia que se nesesita ser muy cuidado al programarlos y que se nesesita de un semaforo.

Última edición por Drewermerc; 13/04/2014 a las 22:05
  #2 (permalink)  
Antiguo 16/04/2014, 12:41
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: duda al crear procesos en windows

En windows mejor usa _beginthreadex o la funcion de la api CreateThread:

Código C:
Ver original
  1. HANDLE ht;
  2. unsigned long tid;
  3.  
  4. if(!(ht = (HANDLE)_beginthreadex(0, 0, &mi_thread, 0, 0, &tid))) {
  5.     //error
  6. }
  7. else {
  8.     //si necesitas recuperar datos del proceso tienes que esperar a que termine
  9.     WaitForSingleObject(ht, INFINITE);
  10.  
  11.     //finalmente liberas el puntero
  12.     CloseHandle(ht);
  13. }

Busca mas información sobre esta funcion para ver los argumentos y los valores de retorno.


"...se nesesita ser muy cuidado al programarlos y que se nesesita de un semaforo..."

Se necesita un semaforo cuando trabajas con variables globales, de lo contrario no lo necesitas. La api de windows lleva implementadas las funciones de seccion critica que seria un semaforo. La finalidad del semaforo es impedir que dos o mas procesos intenten trabajar sobre una misma seccion de memoria.


"...cuando seria comveniente usar los threads..."

Se usan cuando no quieres bloquear el proceso padre, un ejemplo muy comun es en aplicaciones de red. Cualquier situacion donde una funcion bloqueante no es indispensable para el funcionamiento de la aplicacion se suele apartar en un proceso, una vez finalizado se notifica (al proceso padre, o donde sea) y se recuperan los datos con los que trabajaba el thread.


Saludos
vosk
  #3 (permalink)  
Antiguo 16/04/2014, 19:06
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: duda al crear procesos en windows

hola vosk.
bueno lo voy a revisar muchas gracias.

Etiquetas: int, procesos, programa, windows
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:44.