[SFML 2.1] Socket selector
Ostatnio zmodyfikowano 2013-09-04 17:02
Bimbol Temat założony przez niniejszego użytkownika |
[SFML 2.1] Socket selector » 2013-09-04 16:46:14 Witam, napisałem taki oto przykładowy kod: #include <SFML/Graphics.hpp> #include <SFML/Network.hpp> #include <iostream> #include <list>
using namespace std;
int main() { char connection_type; cin >> connection_type; sf::RenderWindow Window( sf::VideoMode( 640, 480 ), "Network Test", sf::Style::Close ); if( connection_type == 's' ) { sf::TcpListener listener; listener.listen( 5000 ); std::list < sf::TcpSocket *> clients; sf::SocketSelector selector; selector.add( listener ); while( true ) { sf::Event Event; while( Window.pollEvent( Event ) ) { if( Event.type == sf::Event::Closed ) Window.close(); } if( selector.wait() ) if( selector.isReady( listener ) ) { sf::TcpSocket * client = new sf::TcpSocket; if( listener.accept( * client ) == sf::Socket::Done ) { cout << "New client connected" << endl; clients.push_back( client ); selector.add( * client ); } else delete client; } Window.clear(); Window.display(); } } else { sf::TcpSocket socket; socket.connect( "192.168.0.100", 5000 ); } return EXIT_SUCCESS; }
Problem polega na tym, że dopóki co kol wiek nie podłączy się do serwera, pętla zatrzymuje się na miejscu if( selector.wait() ) . Dopiero w momencie połączenia pętla wykonuje się i znów zatrzymuje. Próbowałem ustawić setBlocking na false , jednak to nie pomogło. Czy można coś zrobić by pętla się nie zatrzymywała w tym miejscu, tylko bez przerwy się wykonywała i dopiero gdy nastąpi połączenie przejdzie do wewnątrz. Bo z tego co czytałem w dokumentacji, metoda wait powinna zwracać true , bądź false . |
|
pekfos |
» 2013-09-04 16:52:49 Podaj do wait() maksymalną długość oczekiwania, lub umieść to w oddzielnym wątku. |
|
Bimbol Temat założony przez niniejszego użytkownika |
» 2013-09-04 17:02:46 Dzięki, myślałem, że standardowo SFML ustawia timeout.
EDIT.
To nie wystarcza. Teraz host porusza się wolniej od reszty.
EDIT2.
Chyba się udało :) |
|
« 1 » |