elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Mensajes
Páginas: 1 2 3 4 [5] 6 7 8
41  Programación / Programación C/C++ / Re: Ayuda con hilos en C en: 27 Agosto 2015, 15:54 pm
a ver no soy un esperto y alojemos digo una tontería pero no creo que eso sea así:

ami entender seria:
Código:
hilo principal
hilo principal
hilo principal
hilo secundario
hilo principal
hilo principal
hilo secundario

porque si el hilo secundario intenta acceder al recurso que esta utilizan el hilo principal en ese momento no va a poder.

no se si me explico, con claridad.


¿ Entonces es por eso ? Por que con printf intentan acceder ambos a la vez a stdout ?
42  Programación / Programación C/C++ / Re: Ayuda con hilos en C en: 27 Agosto 2015, 15:33 pm
El for se ejecuta correctamente.

Coloca el join al final del hilo principal para evitar que se cierre el programa con el hilo abierto.

A lo que me refiero, es que comentando el join, es decir, teniendo este código:

Código
  1. #include <stdio.h>
  2.    #include <string.h>
  3.    #include <malloc.h>
  4.    #include <pthread.h>
  5.  
  6.    void * funcion(void *);
  7.  
  8.    int main()
  9.    {
  10.  
  11.    pthread_t idhilo;
  12.      int a=5;
  13.    pthread_create(&idhilo, NULL, funcion, &a);
  14.      int y;
  15.      for(y=0;y<5;y++) printf("hilo principal\n");
  16.  
  17.    }
  18.  
  19.    void * funcion(void * a) {
  20.  
  21.      int x;
  22.      for(x=0;x<5;x++) printf("Se está ejecutando el hilo\n");
  23.  
  24.  
  25.    }

La salida que me genera es:

hilo principal
hilo principal
hilo principal
hilo principal
hilo principal

Cuando debería ser:

hilo principal
se está ejecutando el hilo
hilo principal
se está ejecutando el hilo
....

Ya que en teoria los threads sirven para tener dos hilos de ejecución al mismo tiempo, si no, no le veo la diferencia entre esto y llamar a una función.
43  Programación / Programación C/C++ / Re: Ayuda con hilos en C en: 27 Agosto 2015, 15:13 pm
Con el join comentado, funciona correctamente.

Compilar compila, y también arranca, pero no se ejecuta el for con el printf del hilo hijo, lo compilo con:

gcc pruebas.c -o pruebas -lpthread

44  Programación / Programación C/C++ / Re: Ayuda con hilos en C en: 27 Agosto 2015, 13:52 pm
Join hace lo que dices, esperar a que acabe el hilo. Si no lo pones, no espera.

Ya, no espera, pero se supone que si no usas join, ¿ se ejecutarían a la vez no?, es que si comento el join, el hilo ni siquiera llega a ejecutarse.
45  Programación / Programación C/C++ / Ayuda con hilos en C en: 27 Agosto 2015, 13:19 pm
Hola a tod@s, ahora estoy aprendiendo a manejar lo básico de los hilos en C, resulta que tengo este código:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <malloc.h>
  4. #include <pthread.h>
  5.  
  6. void * funcion(void *);
  7.  
  8. int main()
  9. {
  10.  
  11. pthread_t idhilo;
  12.  int a=5;
  13. pthread_create(&idhilo, NULL, funcion, &a);
  14. // pthread_join(idhilo, NULL);
  15.  int y;
  16.  for(y=0;y<5;y++) printf("hilo principal\n");
  17.  
  18.  
  19.  
  20. }
  21.  
  22. void * funcion(void * a) {
  23.  
  24.  int x;
  25.  for(x=0;x<5;x++) printf("Se está ejecutando el hilo\n");
  26.  
  27.  
  28. }

Si descomento la linea 14, se ejecuta el hilo y el hilo principal se queda en segundo plano, si está comentada el hilo no llega a ejecutarse, en teoría, por lo que he leido pthread_join() sirve para mantener el hilo padre en espera hasta que el hilo hijo termine su ejecución, pero yo lo que quiero es que se ejecuten los dos hilos a la vez, ya que creo que eso es la finalidad de usar hilos.

Gracias de antemano.

Saludos.
46  Programación / Programación C/C++ / Re: ¿ Cómo funciona este código que pasa de char a int ? en: 27 Agosto 2015, 10:23 am
Gracias, ya me ha quedado claro.
47  Programación / Programación C/C++ / ¿ Cómo funciona este código que pasa de char a int ? en: 27 Agosto 2015, 01:48 am
Buenas, tengo el siguiente código, donde necesitaba convertir un char (no un array, solo un caracter) en un int, y en internet encontré el siguiente método:

Código
  1. int ataque;
  2. ataque=fgetc(stdin);
  3. while(fgetc(stdin) != '\n');
  4. ataque=ataque-48;

El caso es que funciona perfectamente, pero no se por que al restarle 48 al char me devuelve ese int, he estado buscando información pero no me ha quedado claro, y aunque funcione, me gustaría saber por que funciona.

Gracias de antemano.

Saludos.
48  Programación / Programación C/C++ / Re: ¿ Por que fgets me funciona así ? en: 26 Agosto 2015, 19:30 pm
Las cadenas de caracteres terminan en un caracter nulo '\0'. Con lo que son 3 caracteres: "A\n\0"

Gracias, duda aclarada.
49  Programación / Programación C/C++ / ¿ Por que fgets me funciona así ? en: 26 Agosto 2015, 12:16 pm
Hola a tod@s, resulta que intento obtener un caracter de stdin con fgets, pero para que funcione correctamente, tengo que crear un char [] de como mínimo 3 de tamaño, dejo el código:

Código
  1. printf("Elige un modo de juego\n");
  2. printf("0 -> Modo multijugador (contra un amigo)\n");
  3. printf("1 -> Modo un jugador (contra CPU)\n");
  4. char modo[3];
  5.  
  6. fgets(modo, 3, stdin);
  7. printf("Modo: %c\n", modo[2]);
  8. if (modo[0]=='0') printf("Has elegido modo multijugador\n");
  9. if (modo[0]=='1') printf("Has elegido modo un jugador\n");
  10.  

Si le doy menos de 3 no llega a coger el '\n' por lo que lo deja en el buffer stdin, ¿ Por que si en teoría son dos caracteres solo ? (el caracter que quiero obtener y el '\n').

Gracias y saludos.
50  Programación / Programación C/C++ / Re: Problema redimensionando array en: 25 Agosto 2015, 21:20 pm
Utilizar memoria que no está reservada puede dar errores, no te asegura que no vaya a cambiar, y puede dañar el funcionamiento del programa.
Acceder a memoria que no reservaste puede hacer que modifiques memoria de otra variable de tu programa, por ejemplo.

Gracias ya me ha quedado claro.

Saludos.
Páginas: 1 2 3 4 [5] 6 7 8
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines