Witam, mam mały problem z rzucaniem wyjątku z innego wątku. Sytuacja jest taka. Mam program Server, który jest serwerem. Jest klasa Client (to nie jest program klient, tylko klasa, gdzie przechowuję dane klientów podłączonych do serwera) oraz klasę Ping (chodzi w nowym wątku i cały czas pinguje dopóki jest połączenie). Coś takiego
//pseudokod
//metoda w klasie Server
void addClient() {
QTcpSocket * incoming = //... przechwytywanie polaczenia
Client * c = new Client(incoming);
try {
c->ping();
} catch ( ClientNotRespondException & e ) {
std::cout<<"stracono polaczenie";
}
}
//..
class Client {
QTcpSocket * socket;
Ping * pinger;
QString ip;
QString nickname;
//itd, pomijam inicjalizacje
void ping() {
pinger->start(); //startuje watek pingowania
}
};
class Ping : QThread
{
QTcpSocket * socket; //socket pingowany
void run() {
//wysylanie pinga
//...
throw ClientNotRespondException(); //wyrzucanie wyjatku w przypadku braku odpowiedzi
}
}
Niewyrzuca poprawnie wyjatku tylko cos takiego:
terminate called after throwing an instance of 'ClientNotRespondException'
Przerwane (core dumped)
Wynika to z tego że jest to nowy wątek bo bez wątku wyrzuca dobrze.