Mam w sfml2 funkcję socket.receive w wątku. Nic nie jest aktualnie wysyłane więc program leci dalej, tylko że nie da się też wysłać niz z socket.send, bo jest zablokowany przez receive który nic nie otrzymał. Jak to rozwiązać?
0
0
Możesz wyłączyć blokowanie socketów używając:
socket.setBlocking(false)
Bardziej wyrafinowaną metodą jest użycie SocketSelector'a:
Socket sock;
SocketSelector selector;
// Dodajemy socket do selectora
selector.add(sock);
// Gdzieś w pętli aplikacji:
// Czekamy 5 sekund na otrzymanie danych.
if(selector.wait(sf::seconds(5)))
{
// Jakoś socket coś odebrał.
// Pętla po kontenerze z socketami umieszczonymi w selectorze.
{
if(selector.isReady(socketRef))
{
// Dany socket jest gotowy do odbierania.
socket.receive(...);
}
}
}
else
{
// Żaden socket z umieszczonych w selectorze nie otrzymał danych.
}
Mogłem coś pokiełbasić, bo dawno w SFML nie pisałem. W razie czego masz świetną dokumentację SFML'a :>