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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9
1  Programación / Programación C/C++ / Re: C++ en linux, ¿cómo funciona? en: 28 Mayo 2014, 13:38 pm
Pues me informaré acerca de cómo funciona el buffer de cout y cuándo se vuelva en pantalla, gracias por el dato!
2  Programación / Programación C/C++ / Re: C++ en linux, ¿cómo funciona? en: 28 Mayo 2014, 12:07 pm
Entiendo, pero a qué se debe que ese thread no lo procese inmediatamente? es debido a Linux?

Con respecto al flush, lo desconocía y me resuelve el problema perfectamente. Muchas gracias y saludos! :)
3  Programación / Programación C/C++ / C++ en linux, ¿cómo funciona? en: 28 Mayo 2014, 10:49 am
Buenas, resulta que desde hace tiempo, siempre que he programado C++ en Linux, he notado ciertas irregularidades con respecto a Windows, el ejemplo más simple es el siguiente:

Código
  1. #include <iostream>
  2. int main(int argc, char *argv[])
  3. {
  4.        sleep(1);
  5.        std::cout << "Hello world" << std::endl;
  6.        return 0;
  7. }

El cual mostraba el mensaje "Hello world" antes del sleep, y digo mostraba porque mientras escribía el hilo, he ido a compilar el código y me ha funcionado como debería (con gcc 4.6.4)

Con gcc 4.8.1 también funciona a la perfección:

Código
  1. #include <iostream>
  2. #include <thread>
  3. #include <chrono>
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7.        std::this_thread::sleep_for(std::chrono::milliseconds(1000));
  8.        std::cout << "Hello world" << std::endl;
  9.        return 0;
  10. }


Tal vez sea que en aquel entonces tenía una versión de gcc más antigua que tenía este problema, o quizás que por aquel entonces compilaba con entornos como Geany, y ahora compilo por linea de comandos por SSH, que aunque lo que realmente importe sea el compilador y no el IDE, no sé, quizás algo tenía por ahí que no iba bien.



El caso es que siempre he programado bajo Windows y no le di demasiada importancia a lo anterior, pero ahora estoy programando un cliente y un servidor con sockets, y la aplicación del servidor la programo en un VPS con Ubuntu 12.04, por lo que este bug (o así al menos lo considero yo), esta vez tengo que quitármelo de en medio.

Yendo ya al grano, estoy haciendo un servidor con threads, y mientras que un hilo gestiona los paquetes recibido por los clientes, tengo un otro hilo de prueba que simplemente printea un punto con pausas de 30ms

Código
  1. Client::Client(MYSQL *m) : mysql(m), connected(true), acc_id(0)
  2. {
  3. mutex.lock();
  4. playingM.lock();
  5. thread = std::thread(&Client::loop, this);
  6. thread.detach();
  7.  
  8. coordT = std::thread(&Client::updateCoords, this);
  9. coordT.detach();
  10.  
  11. cout << "Client constructed." << endl;
  12. }
  13.  
  14.  
  15. void Client::updateCoords()
  16. {
  17. playingM.lock();
  18. while(true)
  19. {
  20. cout << ".";
  21. std::this_thread::sleep_for(std::chrono::milliseconds(30));
  22. }
  23. }
  24.  
  25. void Client::loop()
  26. {
  27. mutex.lock();
  28. while(connected)
  29. {
  30. sf::Packet packet;
  31. if(receive(packet) == sf::Socket::Done)
  32. {
  33. unsigned char pid;
  34. packet >> pid;
  35. if(pid!=0x00)
  36. cout << "Packet ID: " << (unsigned short)pid << " | from " << getRemoteAddress().toString() << " | (account.id: " << acc_id << ")." << endl;
  37. switch(pid)
  38. {
  39. case 0x00:
  40. {
  41. ...
  42. }
  43. break;
  44. case 0x01:
  45. {
  46. ...
  47. }
  48. break;
  49. case 0x02:
  50. {
  51. ...
  52. }
  53. break;
  54. case 0x03:
  55. {
  56. ...
  57. }
  58. break;
  59. case 0x04:
  60. {
  61. ...
  62. }
  63.  
  64. break;
  65. case 0x05:
  66. {
  67. ...
  68. }
  69. break;
  70. case 0x06:
  71. {
  72. ...
  73. playingM().unlock();
  74. ...
  75. }
  76. break;
  77. default:
  78. break;
  79. }
  80. }
  81. else
  82. {
  83. cout << "A client has disconnected (account.id: " << acc_id << ")." << endl;
  84. delete this;
  85. }
  86.    }
  87. }


Simplifico Client::loop() y aclaro que en cada case hay couts que son printeados inmediatamente en cuanto llega determinado paquete, mientras que el cout << "."; en Client::updateCoords() no printea nada hasta que lo hace cualquier otro cout en Client::loop(), es como si todos esos puntos se almacenasen en un buffer y de repente se printean todos juntos, cuando al tratarse de 2 hilos independientes, debería de printear por su propia cuenta.


Esto me parece más problema de la librería SFML que de Linux, aunque en Windows no tenga este problema, pero no descarto que la librería funcione de otra forma en Linux y por ello sea culpa de los threads de SFML. En un principio pensaba que era simplemente problema de Linux, ya que lo asocié a lo que expliqué al principio que me pasó hace tiempo, pero al ver que ésto ya no me ocurre, pienso que será cosa de SFML, pero no tengo nada claro.

EDITO: No hacer mucho caso a esto último, ya que los threads que uso no son de SFML sino de C++11, lapsus mental :X queda totalmente descartado SFML como causa del problema


Alguien puede aportar algún dato? Gracias y saludos

PD: Habré tardado como una hora en hacer este hilo, el título incluso lo considero incorrecto debido a mi cambio de opinión al ver que el problema del sleep ya no me ocurre, dudaba si postear en el foro de Linux o en el de C++, pero me decanto más por este, en fin, no sé, este proyecto me está estresando, así que publico el hilo ya y fin. XD
4  Foros Generales / Foro Libre / Re: Vendo unos cuantos libros. en: 23 Agosto 2013, 00:48 am
siento comentar sin aportar nada, pero...

Que vergüenza... un informático rebajandose a vendedor de libros usados... jajajajajaaaa....

5  Foros Generales / Sugerencias y dudas sobre el Foro / Re: [WTF de los WTF] Visitante publicando un mensaje? WTF??? en: 12 Agosto 2013, 18:49 pm
Pues que son los que me aparecieron en http://foro.elhacker.net/who.html .
Todos eran de Marzo de 2006, más tarde volví a mirar e iba por Noviembre de 2006, digo yo que podrían ser la spiders de google, no sé.

Saludos
6  Foros Generales / Sugerencias y dudas sobre el Foro / Re: [WTF de los WTF] Visitante publicando un mensaje? WTF??? en: 12 Agosto 2013, 02:20 am
No sé, pero ahora mismo he mirado, y hay varios Visitantes publicando mensajes en hilos de 2006!



Todos de 2006

http://foro.elhacker.net/redes/problemas_montando_un_servidor_ftp-t113112.0.html
http://foro.elhacker.net/noticias/microsoft_aplaza_ahora_el_lanzamiento_de_office_2007-t115289.0.html
http://foro.elhacker.net/hacking_basico/ayuda_con_los_discos-t115313.0.html
http://foro.elhacker.net/ingenieria_inversa/crackme_10_por_karmany-t115305.0.html
http://foro.elhacker.net/hacking_basico/proxys_duda-t115385.0.html
http://foro.elhacker.net/desarrollo_web/recomendacion_foro-t115372.0.html
http://foro.elhacker.net/software/picar_archivos-t113140.0.html
http://foro.elhacker.net/hacking_wireless/vulnerabilidades_del_3com_11g_cuales-t115400.0.html
http://foro.elhacker.net/analisis_y_diseno_de_malware/fake_propagador_lixkeue-t115441.0.html
http://foro.elhacker.net/hacking_wireless/toshiba_y_ap_en_modo_monitor-t113104.0.html
http://foro.elhacker.net/desarrollo_web/recomendacion_foro-t115372.0.html
http://foro.elhacker.net/hacking_wireless/gran_cagada_xd-t115378.0.html

será google?  :huh: :rolleyes:
7  Programación / .NET (C#, VB.NET, ASP) / Re: Experimento de consumo de memória... ver para creer! en: 8 Agosto 2013, 21:01 pm
Si lo pones a pantalla completa y a calidad a 720p seguro que si xD... no sé si te refieres a eso.. o lo que no ves es el aumento de memória..

 saludos!

Ya lo veo, me daba problemas con el protocolo https, sorry
8  Programación / .NET (C#, VB.NET, ASP) / Re: Experimento de consumo de memória... ver para creer! en: 8 Agosto 2013, 20:48 pm
...

Para los más excépticos aquí podeis ver el problema con vuestros propios ojos:



no, al menos yo no puedo. :huh:
9  Foros Generales / Foro Libre / Re: La Historia Interminable en: 2 Agosto 2013, 15:17 pm
organismo mi celular

puesto que aquí la gente continúa el hilo sin haber concordancia con el mensaje anterior...  >:( Syntax error
/leave

10  Foros Generales / Foro Libre / Re: La Historia Interminable en: 2 Agosto 2013, 12:41 pm
borde de mi
Páginas: [1] 2 3 4 5 6 7 8 9
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines