Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: patilanz en 18 Octubre 2014, 19:24 pm



Título: sfml paso por parametro de window
Publicado por: patilanz en 18 Octubre 2014, 19:24 pm
Hola recién empiezo con sfml y estoy probando las funciones.
Es bastante fácil  ;D
pero lei que no se puede crear una cola de mensajes desde un thread que no ha sido el creador del window ya que quería poner la cola (el while) en otro thread separado.
Luego cree el window dentro del thread que tiene la cola pero necesito tener acceso al window desde la función main.

Se me ocurrió pasar por parámetro un RenderWindow ** al thread pero tampoco funciona porque en la función main utilizo el puntero antes de que se haya creado el window.


Código
  1. #include <SFML/Graphics.hpp>
  2. #include <iostream>
  3. #include <thread>
  4.  
  5.  
  6. using namespace std;
  7. using namespace sf;
  8.  
  9. void window_manage(RenderWindow **);
  10.  
  11.  
  12. int main()
  13. {
  14. sf::VideoMode desktop = VideoMode::getDesktopMode();
  15.  
  16.  
  17. RenderWindow * window = NULL;
  18. thread manage(window_manage,&window);
  19. manage.detach();
  20. window->setTitle("test");
  21. manage.detach();
  22. cout << "aa";
  23. getchar();
  24.    return 0;
  25. }
  26.  
  27. void window_manage(RenderWindow ** _window){
  28. sf::RenderWindow window(VideoMode(200,200), "SFML works!");
  29. *_window = &window;
  30. while (window.isOpen()){
  31.        sf::Event event;
  32.        while (window.pollEvent(event))
  33.        {
  34.            if (event.type == sf::Event::Closed)
  35.                window.close();
  36.        }
  37. }
  38. }


Resumen: Como asignar la dirección del windows creado a un puntero RenderWindow * pasado por parámetro?

No se si me explico bien.

Saludos

@Edit:

Conseguí hacer lo así:
Código
  1. void manage(RenderWindow *window);
  2.  
  3.  
  4. int main()
  5. {
  6. sf::VideoMode desktop = VideoMode::getDesktopMode();
  7. RenderWindow window(VideoMode(200,200),"My first windows with SFLM");
  8. thread _manage(manage,&window);
  9. _manage.detach();
  10.  
  11. while(window.isOpen()){
  12. Event event;
  13. while(window.pollEvent(event)){
  14. if(event.type == Event::Closed)
  15. window.close();
  16. }
  17. }
  18.    return 0;
  19. }
  20.  
  21. void manage(RenderWindow * window){
  22. sleep(milliseconds(1000));
  23. window->setSize(Vector2u(300,300));
  24. }

Pero esto solo me sirve para un window. Para crear mas loops para mas windows?