Ситуация: есть фоновый поток, который в цикле читает сокет (в блокирующем режиме), а по приходе данных рассылает события.
Проблема в том, как этот поток корректно завершить при выходе из приложения. Сейчас у меня функция, вызываемая при закрытии программы, просто закрывает сокет, что приводит к падению фонового потока по SocketException. Но это нехорошо, потому что сокет - разделяемая переменная, так?
Псевдокод такой:
void start()
{
sock = createSocket();
listeners = createActionListenerArray();
startThread();
}
void runThread()
{
try
{
while(!sock.isClosed())
{
data = sock.receive();
sendEventToAll(listeners, data);
}
}
catch(SocketException)
{
// сокет закрылся
}
}
void stop()
{
sock.close();
}