• Viernes 4 de Julio de 2025, 14:50

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - tonilope

Páginas: 1 [2] 3
26
C/C++ / Re: Fallo RarÍsimo Del Dev-c++
« en: Viernes 30 de Junio de 2006, 01:02 »
Añadiendo -Wall -O a la compilación me da el warning. "Misterio" resuelto. Gracias a todos.

Salu2 ;)

27
C/C++ / Re: Fallo RarÍsimo Del Dev-c++
« en: Jueves 29 de Junio de 2006, 21:16 »
Tienes razón en lo que dices del puntero. Al declararlo no apunta a ningún sitio, pero ¿cómo es que funciona si quito la línea char caca[16];?

Salu2 ;)

28
C/C++ / Re: Fallo RarÍsimo Del Dev-c++
« en: Jueves 29 de Junio de 2006, 19:27 »
Me sale esto:


Salu2 ;)

29
C/C++ / Fallo RarÍsimo Del Dev-c++
« en: Jueves 29 de Junio de 2006, 19:12 »
Empezamos...

Si compilo:

Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. int main(int argc, char **argv)
  5. {
  6.   int *a;
  7.   char caca[16];
  8.  
  9.   *a=456;
  10.   printf("%d", *a);
  11.  
  12.   return 0;
  13. }
  14.  
  15.  

al ejecutar "casca".

Pero si en vez de eso compilo:

Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. int main(int argc, char **argv)
  5. {
  6.   int *a;
  7.  
  8.   *a=456;
  9.   printf("%d", *a);
  10.  
  11.   return 0;
  12. }
  13.  
  14.  

funciona perfectamente.

Pero aún hay más, si en vez de lo anterior pruebo con:

Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. int main(int argc, char **argv)
  5. {
  6.   char caca[16];
  7.  
  8.   return 0;
  9. }
  10.  
  11.  

funciona sin problemas.

¿Alguien me explica qué pasa? ¿Es cosa del Dev-c++ (4.9.8.0), de Win2k, o de mi CPU?

Os rogaría que probárais a compilarlo con Dev-c++ (he probado con LCC-Win32 y no pasa)

¿Duendes  :huh:  :huh: ?

Salu2 ;)

30
C/C++ / Re: Sobre Libreria Biginteger
« en: Jueves 29 de Junio de 2006, 03:04 »
Mejor que BigInteger te recomiendo la librería GMP.

http://www.cs.nyu.edu/exact/core/gmp/gmp-s...ingw-4.1.tar.gz (Versión para Dev-C++)
Para instalarla:
1) Descomprimes el zip.

2) Copias el contenido de la carpeta INCLUDE del zip en la carpeta include del directorio de instalación de Dev-C++ (Lo mismo con la carpeta LIB)

Cuando quieras usarla creas un proyecto en Dev-C++:

Código: Text
  1.  
  2. BLA BLA BLA...
  3. #include <gmp.h>//Hay que linkar libgmp.a desde opciones de proyecto.
  4.  
  5. BLA BLA BLA...
  6.  
  7.  

http://www.swox.com/gmp/gmp-man-4.2.1.pdf -> Manual oficial (inglés)

Salu2 ;)

31
C/C++ / Re: Crear Vector Sin Saber Tamaño
« en: Jueves 29 de Junio de 2006, 00:06 »
Con la función malloc() y realloc().

Supongamos que vas a leer números enteros.

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int main(int argc, char **argv)
  6. {
  7. int *vector, tamanio=0;
  8.  
  9. //Reservas memoria para 1 entero
  10. vector = (int*)malloc( (tamanio+1)*sizeof(int) );
  11.  
  12. //Mientras no introduzca un cero
  13. do{
  14. printf("\nIntroduce un entero: ");
  15. scanf("%d", &vector[tamanio];
  16.  
  17. //Ampliamos el vector para 1 elemento más
  18. tamanio++;
  19. vector=(int *)realloc(vector, (tamanio+1));
  20.  
  21. }while(entero!=0);
  22.  
  23. //Liberamos la memoria
  24. free(vector);
  25.  
  26. return 0;
  27. }
  28.  
  29.  
  30.  

Salu2 ;)

32
C/C++ / [Código Fuente] Quería decir:
« en: Martes 27 de Junio de 2006, 17:56 »

33
C/C++ / [Código Fuente] Versión 4.0
« en: Martes 27 de Junio de 2006, 17:56 »
La última versión con 2 "fallos" arreglados. ahora sí que ta "perfesta" xD --> http://personales.ya.com/tonilope/chateitor.c

Salu2 ;)

PD: No la modifico aquí para no darles más el coñazoa los webmasters de solocodigo.com

34
C/C++ / [Código Fuente] Sobre la nueva versión
« en: Lunes 26 de Junio de 2006, 11:45 »
He arreglado un bug y añadido fecha-hora del último mensaje recibido.

Salu2 ;)

35
Pascal / Re: No Se Hacer El Programa
« en: Domingo 25 de Junio de 2006, 18:46 »
Aquí te dejo una posible implementación en C. Espero que te sirva de guía.

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5.  
  6.  
  7. int main(int argc, char **argv)
  8. {
  9. int conta_jugador, conta_carta, aux, repartidas[40], cartas[4][4];
  10. char palos[4][20], figuras[3][20];
  11.  
  12. sprintf(palos[0], "Oros");
  13. sprintf(palos[1], "Copas");
  14. sprintf(palos[2], "Espadas");
  15. sprintf(palos[3], "Bastos");
  16.  
  17. sprintf(figuras[0], "Sota");
  18. sprintf(figuras[1], "Caballo");
  19. sprintf(figuras[2], "Rey");
  20.  
  21.  
  22. srand(time(NULL));
  23.  
  24. for(aux=0; aux<40; aux++)
  25.     repartidas[aux]=0;
  26.    
  27.  
  28. //Repartimos las cartas "de una en una" (como se haría normalmente)
  29. for(conta_carta=0; conta_carta<4; conta_carta++)
  30. {
  31.  
  32. for(conta_jugador=0; conta_jugador<4; conta_jugador++)
  33. {
  34.  
  35.     do{
  36.     aux=rand()%40;
  37.     }while(repartidas[aux]);
  38.    
  39.     repartidas[aux]=1;
  40.    
  41.     cartas[conta_jugador][conta_carta]=aux;
  42.    
  43. }
  44.  
  45. }
  46.  
  47.  
  48. //Mostramos por pantalla las cartas de cada jugador
  49. for(conta_jugador=0; conta_jugador<4; conta_jugador++)
  50. {
  51.  
  52. printf("\n\nJugador %d:", conta_jugador+1);
  53.  
  54. for(conta_carta=0; conta_carta<4; conta_carta++)
  55. {
  56.  
  57. aux=cartas[conta_jugador][conta_carta]%10;
  58.  
  59.  if(aux<7)
  60.      printf("\n%d de %s", aux+1, palos[cartas[conta_jugador][conta_carta]/10]);
  61.  else
  62.      printf("\n%s de %s", figuras[aux-7], palos[cartas[conta_jugador][conta_carta]/10]);
  63.  
  64. }
  65.  
  66. }
  67.  
  68. return 0;
  69. }
  70.  
  71.  
  72.  

36
Pascal / Re: No Se Hacer El Programa
« en: Viernes 23 de Junio de 2006, 00:49 »
Te voy a dar unas pistillas:

1) En total hay 40 cartas (4 palos x 10 cartas/palo = 40 cartas)

2) La función Random(x) te devuelve un número aleatorio entre 0 y x. (Al principio del programa hay que llamar a la función Randomize para que "reinicie" la secuencia de números aleatorios).

3) Cada vez que llames a Random(39), te devolverá un numerito entre 0-39. Mirarás en un array booleano (0-1) llamado cartas[] (por ejemplo) si la carta elegida ya ha sido repartida. Si todavía no había salido, pones a 1 el registro del array. Si la carta elegida ya está repartida, tendrás que volver a llamar a la función .

4) Una vez obtenido el numerito, tienes que averiguar a qué carta corresponde. Para ello utilizas la operación MÓDULO (resto de la divisón entera) y la DIVISIÓN ENTERA.

Ejemplo:

Supongamos que has obtenido el número 23 de forma aleatoria. Compruebas que cartas[23] sea igual a 0. Si es así, pones cartas[23]=1 y haces 23 Mod 10 = 3 Eso te dice que se trata de un 4 (ten en cuenta que 0=AS, 1=2, 2=3, etc...)
Para averiguar el palo haces 23 Div 10 = 2 Luego el palo es 2=ESPADAS (0=OROS 1=COPAS, etc...). La carta es el 4 de espadas.

Salu2 ;) y suerte que es muy sencillo.

37
ASP / Re: Validar Direccion Ip
« en: Miércoles 14 de Junio de 2006, 19:05 »
Yo me hice este en C (posiblemente el mejor lenguaje de la historia :P) hace ya bastante:

Código: Text
  1.  
  2. int compruebaIP(char *ip){
  3.  
  4.   char octeto[4];
  5.   int contador, j, valida, num;
  6.  
  7.  
  8.   contador=0;
  9.   valida=1;
  10.   num=0;
  11.  
  12.   while(contador<=strlen(ip) && valida)    
  13.   {
  14.     j=0;
  15.  
  16.  
  17.     while(ip[contador]!='.' && j<3 && ip[contador]!='\0' && valida)      
  18.    {
  19.  
  20.       if(ip[contador]>=48 && ip[contador]<=57 )            
  21.             octeto[j++]=ip[contador++];
  22.       else
  23.             valida=0;
  24.      
  25.     }
  26.  
  27.     octeto[j]='\0';
  28.  
  29.  
  30.     if(j>0 && (ip[contador]=='.' || ip[contador]=='\0') && atoi(octeto)<=255 && atoi(octeto)>=0)              
  31.          num++;
  32.     else
  33.          valida=0;
  34.  
  35.  
  36.      contador++;
  37.  
  38.   }
  39.  
  40.  
  41.   if(num!=4)        
  42.           valida=0;
  43.  
  44.  
  45.   return(valida);
  46.  
  47. }
  48.  
  49.  

1º) Comprueba que sólo haya cifras en cada octeto (como máximo 3 cifras por octeto).

2º) Comprueba que el octeto esté entre 0 y 255.

3º) Comprueba que la Ip tenga exactamente 4 octetos.

Si pasa los 3 filtros, la IP es válida.

Salu2 ;)

38
C/C++ / Re: Ordenacion De Registros
« en: Miércoles 14 de Junio de 2006, 18:48 »
He hecho un par de correciones rápidas muy POR ENCIMA y funciona. Aquí te lo dejo:

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. struct stRegistro
  7. {
  8. char valido; //campo que indica si el registro es valido S->Valido, N->Invalido
  9. char nombre[34];
  10. int dato[4];
  11. };
  12.  
  13. int comparar(const void *, const void *);
  14.  
  15. int Menu();
  16. void Leer(struct stRegistro *reg);
  17. void Mostrar(struct stRegistro *reg);
  18. void Listar(long n,struct stRegistro *reg);
  19. long LeeNumero();
  20. void Empaquetar(FILE **fa);
  21.  
  22. int main()
  23. {
  24. struct stRegistro reg;
  25. struct stRegistro *array;
  26. FILE *fa;
  27. int opcion, total_registros;
  28. long numero, conta;
  29. fa=fopen("alea.dat","r+b"); //este modo permite leer y escribir
  30. if(!fa)fa=fopen("alea.dat","w+b"); //si el fichero no existe, lo crea
  31. do
  32. {
  33. opcion=Menu();
  34.  
  35.  
  36. switch(opcion)
  37. {
  38.  
  39.  
  40. case'1': //añadir registro
  41. Leer(&reg);
  42. //insertar al final;
  43. fseek(fa,0,SEEK_END);
  44. fwrite(&reg,1,sizeof(struct stRegistro),fa);
  45. break;
  46.  
  47.  
  48. case'2': //mostrar registro
  49. system("cls");//system("cls");
  50. printf("Mostrar registro:");
  51. numero=LeeNumero();
  52. fseek(fa,numero*sizeof(struct stRegistro),SEEK_SET);
  53. fread(&reg,1,sizeof(struct stRegistro),fa);
  54. Mostrar(&reg);
  55. break;
  56.  
  57.  
  58. case'3': // eliminar registro
  59. system("cls");//system("cls");
  60. rewind(fa);
  61.  
  62.  
  63. total_registros=0;
  64. system("cls");
  65. printf("Nombre Calificacion\n");
  66.  
  67. while(fread(&reg,1, sizeof(struct stRegistro), fa)>0)
  68.      {
  69.      total_registros++;
  70.      }
  71.  
  72. array=(struct stRegistro*)malloc(total_registros*sizeof(struct stRegistro));
  73.  
  74. rewind(fa);
  75.  
  76. conta=0;
  77. while(fread(&array[conta++],1, sizeof(struct stRegistro), fa)>0);
  78.  
  79. for(conta=0; conta<total_registros; conta++)
  80.      Listar(conta, &array[conta]);
  81.  
  82. free(array);
  83.  
  84. printf("Eliminar registro:");
  85. numero=LeeNumero();
  86. fseek(fa,numero*sizeof(struct stRegistro),SEEK_SET);
  87. fread(&reg,1,sizeof(struct stRegistro),fa);
  88. reg.valido='N';
  89. fseek(fa,numero*sizeof(struct stRegistro),SEEK_SET);
  90. fwrite(&reg,1,sizeof(struct stRegistro),fa);
  91. break;
  92.  
  93.  
  94. case'4': //mostrar todo
  95. rewind(fa);
  96.  
  97.  
  98. total_registros=0;
  99. system("cls");
  100. printf("Nombre Calificacion\n");
  101.  
  102. while(fread(&reg,1, sizeof(struct stRegistro), fa)>0)
  103.      {
  104.      total_registros++;
  105.      }
  106.  
  107. array=(struct stRegistro*)malloc(total_registros*sizeof(struct stRegistro));
  108.  
  109. rewind(fa);
  110.  
  111. conta=0;
  112. while(fread(&array[conta++],1, sizeof(struct stRegistro), fa)>0);
  113.  
  114. qsort((void*)array, total_registros, sizeof(struct stRegistro), comparar);
  115.  
  116. for(conta=0; conta<total_registros; conta++)
  117.      Listar(conta, &array[conta]);
  118.      
  119. getch();
  120.  
  121. free(array);
  122. break;
  123.  
  124. case'5': // eliminar marcados
  125. Empaquetar(&fa);
  126. break;
  127.  
  128. //NO entiendo para qué vale este case
  129. /*
  130. case'6':
  131. rewind(fa);
  132. numero=0;
  133. system("cls");//system("cls");
  134. printf("Nombre Datos\n");
  135. while(fread(&reg,sizeof(struct stRegistro),1,fa));
  136. Listar(numero++,&reg);
  137. getch(); //system("PAUSE");
  138. break;
  139. */
  140.  
  141. }
  142. }while(opcion!='0');
  143. fclose(fa);
  144. return 0;
  145. }
  146.  
  147.  
  148. // Muestra un menu con las opciones disponibles y captura una opcion del usuario
  149.  
  150.  
  151. int Menu()
  152.  
  153. {
  154.  
  155. char resp[20];
  156. do
  157.  
  158. {
  159.  
  160. system("cls");//system("cls");
  161. printf("MENU PRINCIPAL\n");
  162. printf("--------\n\n");
  163. printf("1-Insertar registro\n");
  164. printf("2-Mostrar registro\n");
  165. printf("3-Eliminar registro\n");
  166. printf("4-Mostrar todo\n");
  167. printf("5-Eliminar registro marcados\n");
  168. printf("6-Mostrar lista de disponibles\n");
  169. printf("0-Salir\n");
  170. resp[0]=getch();
  171. } while(resp[0]<'0'&&resp[0]>'6');
  172. return resp[0];
  173. }
  174.  
  175.  
  176. // permite que el usuario introduzca un registro por pantalla
  177. void Leer(struct stRegistro *reg)
  178.  
  179. {
  180. int i;
  181. char numero[6];
  182. system("cls");// system("cls");
  183. printf("Leer registro:\n\n");
  184. reg->valido='S';
  185. printf("Nombre:");
  186. fgets(reg->nombre,34,stdin);
  187. // la funcion fgets captura el retorno de linea, hay que eliminarlo:
  188. for(i=strlen(reg->nombre)-1;i&&reg->nombre[i] <' ';i--)
  189. reg->nombre[i]=0;
  190. for(i=0;i<4;i++)
  191. {
  192. printf("Calificacion[%1d]:",i);
  193. fgets(numero,6,stdin);
  194. reg->dato[i]=atoi(numero);
  195. }
  196. }
  197.  
  198.  
  199. // muestra un registro en pantalla, si no esta marcado como borrado
  200. void Mostrar(struct stRegistro *reg)
  201. {
  202. int i;
  203. system("cls");//system("cls");
  204. if(reg->valido=='S')
  205. {
  206. printf("Nombre: %s\n",reg->nombre);
  207. for(i=0;i<4;i++)
  208. printf("Calificacion[%1d]:%d\n",i,reg->dato[i]);
  209. }
  210. i++;
  211. getch();//system("PAUSE");
  212. }
  213.  
  214.  
  215.  
  216.  
  217.  
  218. void Listar(long n, struct stRegistro *reg)
  219. {
  220. int i;
  221. if(reg->valido=='S')
  222. {
  223. printf("[%6ld]%-34s",n,reg->nombre);
  224. for(i=0;i<4;i++)
  225. printf(",%4d",reg->dato[i]);
  226. printf("\n");
  227. }
  228.  
  229. }
  230. // lee un numero suministrado por el usuario
  231. long LeeNumero()
  232. {
  233. char numero[6];
  234. fgets(numero,6,stdin);
  235. return atoi(numero);
  236. }
  237. // elimina los registros marcados como borrados
  238. void Empaquetar(FILE**fa)
  239. {
  240. FILE *ftemp;
  241. struct stRegistro reg;
  242.  
  243. ftemp=fopen("alea.tmp","wb");
  244.  
  245. rewind(*fa);
  246.  
  247. while(fread(&reg,1,sizeof(struct stRegistro),*fa)>0)
  248. {
  249.  
  250. if(reg.valido=='S')
  251. fwrite(&reg,sizeof(struct stRegistro),1,ftemp);
  252.  
  253. }
  254.  
  255. fclose(ftemp);
  256. fclose(*fa);
  257.  
  258. remove("alea.bak");
  259. rename("alea.dat","alea.bak");
  260. rename("alea.tmp","alea.dat");
  261.  
  262. *fa=fopen("alea.dat","r+b");
  263. }
  264. int comparar(const void *arg1, const void *arg2)
  265. {
  266.  
  267. return strcmp(((struct stRegistro*)arg1)->nombre, ((struct stRegistro*)arg2)->nombre);
  268.  
  269. }
  270.  
  271.  

Salu2 ;)

39
C/C++ / Re: Ordenacion De Registros
« en: Miércoles 14 de Junio de 2006, 02:43 »
Pon aquí el problema que tengas.

Salu2 ;)

40
C/C++ / Re: Ordenacion De Registros
« en: Miércoles 14 de Junio de 2006, 01:28 »
Hola. Por lo que puedo entender tienes un fichero con registros del tipo struct stRegistro y leyendo el código (incompleto) que has puesto intuyo que tienes definida una estructura así:

Código: Text
  1.  
  2. struct stRegistro
  3. {
  4. char nombre[50];
  5. int digito;
  6. };
  7.  
  8.  

Si esto es correcto y lo que pretendes es MOSTRAR por PANTALLA una lista del tipo:

Juan 1
Antonio 34
Rosa 7
Marcos 23
ETC...


ORDENADA alfabéticamente por el nombre:
Antonio 34
Juan 1
Marcos 23
Rosa 7
ETC...


TIENES que:

1) Declarar un array de tipo struct stRegistro para 10 (o los que necesites) elementos:
Código: Text
  1.  
  2. struct stRegistro array[10];
  3.  
  4.  

2) Leer TODOS los registros del fichero y cargarlos en el array

Código: Text
  1.  
  2.  
  3. conta=0;
  4.  
  5. while (fread(&array[conta], 1, sizeof(struct stRegistro), puntero_fichero) > 0)
  6. {
  7.  
  8. conta++;
  9.  
  10. }
  11.  
  12.  
  13.  

3) Una vez tienes la lista cargada en el array, la ordenas:

Código: Text
  1.  
  2. qsort((void*)array, 10, sizeof(struct stRegistro), comparar);
  3.  
  4.  

4) Finalmente la muestras ordenada por pantalla:

Código: Text
  1.  
  2. for(conta=0; conta<10; conta++)
  3. printf("\n%s\t%d", array[conta].nombre, array[conta].digito);
  4.  
  5.  

Ejemplo completo:

Código: Text
  1.  
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. #define NUM_ELEMENTOS 10
  8.  
  9. struct stRegistro
  10. {
  11.  
  12. char nombre[50];
  13. int digito;
  14.  
  15. };
  16.  
  17.  
  18. int comparar(const void *, const void *);
  19.  
  20.  
  21.  
  22.  
  23. int main(int argc, char **argv)
  24. {
  25.  
  26. struct stRegistro array[NUM_ELEMENTOS];
  27. int conta;
  28. FILE *puntero_fichero;
  29.  
  30. puntero_fichero=fopen("fichero.dat", "rb");
  31. conta=0;
  32. while (fread(&array[conta], 1, sizeof(struct stRegistro), puntero_fichero) > 0)
  33. {
  34.  
  35. conta++;
  36.  
  37. }
  38.  
  39. fclose(puntero_fichero);
  40.  
  41. printf("\n\nLa lista original:\n");
  42.  
  43. for(conta=0; conta<NUM_ELEMENTOS; conta++)
  44. printf("\n%s\t%d", array[conta].nombre, array[conta].digito);
  45.  
  46. qsort((void*)array, NUM_ELEMENTOS, sizeof(struct stRegistro), comparar);
  47.  
  48. printf("\n\nLa lista ordenada:\n");
  49.  
  50. for(conta=0; conta<NUM_ELEMENTOS; conta++)
  51. printf("\n%s\t%d", array[conta].nombre, array[conta].digito);
  52.  
  53. return 0;
  54.  
  55. }
  56.  
  57. int comparar(const void *arg1, const void *arg2)
  58. {
  59.  
  60. return strcmp(((struct stRegistro*)arg1)->nombre, ((struct stRegistro*)arg2)->nombre);
  61.  
  62. }
  63.  
  64.  

Adjunto un fichero que he creado con 10 registros para probar este código.

Salu2 ;)

41
C/C++ / Re: Ordenacion De Registros
« en: Martes 13 de Junio de 2006, 21:55 »
Si te lías con ese ejemplo:

Salu2 ;)

42
C/C++ / Re: Ordenacion De Registros
« en: Martes 13 de Junio de 2006, 21:28 »
Tienes la función qsort() -> http://c.conclase.net/librerias/funcion.php?fun=qsort

Salu2 ;)

43
C++ Builder / Re: ¿cómo Hacer Dos Líneas De Ejecución?
« en: Martes 13 de Junio de 2006, 16:46 »
Puedes crear tantos hilos como necesites en tu programa.

Aunque lo tienes todo explicado en la MSDN te lo explico por encima:

Código: Text
  1.  
  2. #include <windows.h>
  3.  
  4. /* Pones el resto de includes, defines, etc...
  5. .
  6. .
  7. .
  8. ETC...*/
  9.  
  10. DWORD WINAPI funcion_hilo_secundario(void *);
  11.  
  12. int main(int argc, char **argv)
  13. {
  14.  
  15. HANDLE h_HandleHilo;
  16. DWORD identificador_hilo;
  17. int numero;
  18.  
  19. //Creamos el hilo secundario
  20. h_HandleHilo=CreateThread(NULL,0,funcion_hilo_secundario,(void*)&numero,0,&identificador_hilo);
  21.  
  22.  
  23. printf("\n\nEstoy en el hilo principal y el secundario me ha mandado un %d", numero);
  24.  
  25. /*Continuamos con el hilo principal
  26. .
  27. .
  28. .
  29. ETC...*/
  30.  
  31.  
  32. return 0;
  33. }
  34.  
  35. DWORD WINAPI funcion_hilo_secundario(void *parametro)
  36. {
  37.  
  38. //Aqui pones lo que quieres que se ejecute en el hilo secundario
  39.  
  40. int *numero;
  41.  
  42. numero=(int*)parametro;
  43.  
  44. printf("\n\nEstoy en el hilo secundario y el hilo principal me ha mandando un: %d", *numero);
  45.  
  46. *numero=8;
  47.  
  48. return 0;
  49.  
  50. }
  51.  
  52.  
  53.  

El CUARTO parámetro de la función CreateThread puede ser NULL si NO le mandas ningún parámetro al hilo que creas. (Si necesitas mandarle más de un parámetro al hilo secundario, mándale UNA estructura).
El parámetro que le envías al hilo secndario es por referencia para poder comunicar el hilo principal con él.

Cuando termina funcion_hilo_secundario() se destruye el hilo secundario (aunque hay formas de destruir un hilo antes de que termine de forma "natural").

El hilo principal TIENE que ser el último en terminar.

MUCHA más información en -> http://msdn.microsoft.com/library/default....ing_threads.asp

Salu2 ;)

44
Visual C++ / Menú Personalizado
« en: Martes 13 de Junio de 2006, 03:43 »
¿Alguien sabe como puede crearse un menú que tenga una imagen vertical en el lateral al estilo de éste?:



Salu2 ;)

45
Visual C++ / Re: Abrir Programa Externo Desde Boton
« en: Domingo 11 de Junio de 2006, 18:55 »
Prueba con:

Código: Text
  1. system("start documento.txt");
  2.  

Salu2 ;)

46
Visual C++ / Re: Abrir Programa Externo Desde Boton
« en: Sábado 10 de Junio de 2006, 18:47 »
Probad con:
Código: Text
  1. system("call documento.txt");
  2.  

Salu2 ;)

47
C/C++ / Re: Llamar A Un .exe
« en: Sábado 10 de Junio de 2006, 16:11 »
Para lanzar un ejecutable externo:

Código: Text
  1. system("eso.exe");
  2.  

Para abrir un archivo con su programa asociado:

Código: Text
  1. system("call cancion.mp3");
  2.  

Salu2 ;)

48
Visual C++ / Re: ¿cómo Poner Controles En La Ventana Principal?
« en: Jueves 8 de Junio de 2006, 17:47 »
Citar
si es como poner controles por codigo usa CreateWindowEx

Jejeje, no había caído que con CreateWindowEx() se pueden crear controles. Gracias por el soplo :)

Salu2 ;)

49
Visual C++ / ¿cómo Poner Controles En La Ventana Principal?
« en: Miércoles 7 de Junio de 2006, 21:55 »
¿Alguien sabe?

Salu2 ;)

50
C/C++ / Re: Una Función Que Lea Por Letra
« en: Martes 6 de Junio de 2006, 04:59 »
Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <windows.h>
  5.  
  6. char lee_caracter();
  7.  
  8. int main(int argc, char **argv)
  9. {
  10.  
  11. char opcion;
  12.  
  13. printf("\nPulsa una tecla:\n\n");
  14.  
  15. while(opcion!=13)
  16.     {
  17.     opcion=lee_caracter();
  18.     printf("\nHas pulsado -> %c \n", opcion);
  19.     }
  20.  
  21. return 0;
  22.  
  23. }
  24.  
  25. char lee_caracter()
  26. {
  27.    int car;
  28.    DWORD leidos, modo;
  29.    
  30.    GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &modo);  
  31.    SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), modo & !ENABLE_ECHO_INPUT & !ENABLE_PROCESSED_INPUT);
  32.    ReadConsole(GetStdHandle(STD_INPUT_HANDLE), &car, 1, &leidos, NULL);
  33.    SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), modo);  
  34.    return (char)car;
  35. }
  36.  
  37.  

Salu2 ;)

Páginas: 1 [2] 3