Come devo gestire le eccezioni del ciclo degli eventi?

0

Qual è la migliore pratica per la gestione delle eccezioni generate da gestori di eventi / ascoltatori in un ciclo di eventi? Ad esempio:

class EventLoop
{
  public:
  void start(); //create a thread which calls run();
  void run()
  {
    while(true)
    {
      listener.waitEvent();  //blocks until an event occured
      try
      {
        listener.processEvent(); //calls given handler
      }
      catch(const Exception& excp)
      {
        //The exception is thrown from another class
        //What shall I do?
      }
    }
  }
  //other code..
}
//Sample event loop usage:
EventLoop el;
SampleListener sampleListener;
el.setListener(sampleListener);
el.start();
//other work..

In questo esempio, quando processEvent() genera un'eccezione, il thread del ciclo di eventi dovrebbe essere in grado di continuare a essere eseguito. Inoltre, l'errore dovrebbe essere gestito. Una possibile soluzione potrebbe essere aggiungere un metodo errorOccured () al listener. Nel blocco catch il metodo potrebbe essere invocato. Ma aumenta seriamente la complessità del programma.

I tuoi suggerimenti? Grazie ..

    
posta Q Q 27.01.2015 - 12:41
fonte

1 risposta

4

Quello che faccio è che registro solo il nome della classe di eccezione, il messaggio di eccezione e la traccia dello stack di eccezioni. Non penso che ci sia qualcos'altro che può essere fatto, né altro che debba essere fatto.

Considero questa parte integrante del modello del notificatore: il fatto che un osservatore possa fallire non dovrebbe influenzare in alcun modo il notificante, né dovrebbe impedire ad altri osservatori di osservare la notifica.

Alcune persone credono che una volta che un'eccezione è stata lanciata, l'applicazione dovrebbe terminare, ma penso che questo sia terribilmente miope.

    
risposta data 27.01.2015 - 14:11
fonte

Leggi altre domande sui tag