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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 122
1  Programación / Programación C/C++ / Re: Duda con threads en: 19 Mayo 2014, 12:15 pm
amchacon: por eso, si los punteros son el pasado ...
En C++, el uso de punteros ya no es tan necesario. Para modificar variables y tal, prefiero mil veces las referencias.

El único uso que le veo a los punteros en C++ es para el polimorfismo. Para todo lo demás tienes las STL y las referencias:

Código
  1. unique_ptr<int> MemoriaDinamica(new int);
  2.  
  3. array<int,10> MemoriaDinamicaArray;
  4.  
  5. vector<int> MemoriaDinamicaVector(10);

Los punteros son suceptibles a los memoryleaks, las STL no ^^
2  Programación / Programación C/C++ / Re: Duda con threads en: 19 Mayo 2014, 11:46 am
Te recomiendo Java y C#.
Esos no son punteros crudos al viejo C xD

Yo los situaría como las referencias de C++ (aunque estas se pueden modificar).
3  Programación / Programación C/C++ / Re: Duda con threads en: 18 Mayo 2014, 19:19 pm
Perdón no te había entendido lo de dejar al aire. Ahora ya todo esta perfecto.
Pero porque tengo que usar ref() cual es la diferencia en pasar lo por una función normal?
Gracias por tu paciencia
A mí por lo menos no me compila.

Son detalles de la implementación de la librería (no es como una llamada a función, es más complejo...). En tal caso, usa ref para pasarlos parametros por referencia en la clase thread. Además el código queda bastante autoexplicativo (se ve que paramétros son por valor y cuales por referencia).

Puedes evadir el ref() si en vez de  de parámetros SOCKET& los pones como SOCKET*, y pasas mediante &variable.
Y cada vez que tengas que adceder, con el * y los -> de marras. Quita, quita.

Los punteros son del pasado ^^
4  Programación / Programación C/C++ / Re: Duda con threads en: 18 Mayo 2014, 17:54 pm
Gracias ahora funciona. La documentacion thread es algo mala en ningun lugar pone lo de ref()

Y una ultima pregunta  ;D
Puedo hacer join del thread desde la función que llama el thread?
Lo necesito porque tengo un thread que hace los listen pero tiene que ser multiusuario por lo tanto el thread no puede tener nombre ni me puedo parar a esperar para que el thread se cierre si no que se tiene que terminar solo con join cuando el usuario se valla, esto ya lo detecto con los sockets.
Vamos a ver, me lees cuando escribo o que? :huh:
Citar
La clase thread presupone que harás join en algún momento (al final del programa/funcion normalmente), si tu idea es dejar el hilo a tu aire tienes que usar detach()

Código
  1. thread t(hilo);
  2. t.detach();

De todas formas, también puedes hacerlo con join(). Te haces un array de threads (al principio, vacios) y cuando sepas que un hilo se ha cerrado haces join (además de hacer join antes de cerrar el programa).
5  Programación / Programación C/C++ / Re: Duda con threads en: 17 Mayo 2014, 16:49 pm
Hay varios errores ahí.

El primero esque no asignas ningun identificador para el objeto thread:
Código
  1. thread unHilo(newClient,socket_s,socket_c,client);

Mejor asi, no te olvides después hacer un join() antes de terminar.

Por cierto, los argumentos con referencia deben de indicarse con ref. De modo que debería ser así:
Código
  1. thread unHilo(newClient,ref(socket_s),ref(socket_c),ref(client));

6  Programación / Programación C/C++ / Re: Duda con threads en: 15 Mayo 2014, 21:39 pm
La idea es la perfecta sincronización, si vas a salir del programa tendrás que esperar a que terminen el resto de los hilos. De lo contrario podría tener efectos adversos.

La clase thread presupone que harás join en algún momento (al final del programa/funcion normalmente), si tu idea es dejar el hilo a tu aire tienes que usar detach():
Código
  1. thread t(hilo);
  2. t.detach();

Pero pocos son los casos que es necesario tirar por ahí.

Citar
Puedo detectar que el thread se ha cerrado
¿Sin usar join?

No, a no ser que te pongas un booleano de control en el hilo... Lo más natural sería el uso de condiction_variables.

Citar
y ejecutar otra función con join?
No, una vez que haz hecho join no puedes ejecutar otra funcion.

Aunque si puedes aprovecharte del move-constructor y crear otro objeto thread:
Código
  1. thread t(hilo);
  2. t.join();
  3.  
  4. t = thread(hilo2); // move contructor
7  Programación / Programación C/C++ / Re: Duda con threads en: 15 Mayo 2014, 13:52 pm
No hay ningún problema ahí, nadie te garantiza que un thread van a ir al mismo tiempo (depende de los núcleos físicos que tengas, la carga del sistema...).

Si quieres un orden fijo, tendrás que sincronizar los threads con los mecanismos correspondientes.



Vale lo acabo de revisar y efectivamente has metido la gamba xD.

El problema está aquí:
Código
  1. thread test(hilo,1);
  2. test.join();
  3. thread test2(hilo,2);
  4. test2.join();

Ponlo así:
Código
  1. thread test(hilo,1);
  2. thread test2(hilo,2);
  3. test.join();
  4. test2.join();

El join no es para iniciar el thread, sino para esperar a que acabe xD
8  Programación / Programación C/C++ / Re: Ayuda programación C [agilizar programa] en: 12 Mayo 2014, 21:54 pm
Funciones inlines  y optimizaciones del compilador activadas al máximo. Las macros son propensas a errores...
9  Programación / Programación C/C++ / Re: Ayuda programación C [agilizar programa] en: 12 Mayo 2014, 16:43 pm
Si tienes un compilador moderno y tienes las optimizaciones activadas, el compilador hará las funciones inline cuando sea necesario.

¿Cuando no hará las funciones inline? Cuando por ejemplo, sea una función recursiva que el compilador no pueda "desenrollar" y convertir en un bucle.
10  Programación / Programación C/C++ / Re: Usar archivo que necesita privilegios en: 8 Mayo 2014, 14:49 pm
No tienes permisos, por ello falla.

No puedes creartelo en la misma carpeta donde compiles? Asi solo tienes que introducir el nombre del archivo.
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 122
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines