/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Signal til Exception
Fra : Peter Villadsen


Dato : 18-08-02 19:41

Hejsa,

Findes der metoder i C++, således at signaler kan mappes om til Exceptions.
Helt konkret drejer det sig om noget købe middleware, som er skyld i
signalet SIGSEGV. Og det vil jeg mægtig gerne mappe om til en exception i
stedet for et signal.

Nogle ideer ?

Mvh.

Peter Villadsen



 
 
Esben Mose Hansen (18-08-2002)
Kommentar
Fra : Esben Mose Hansen


Dato : 18-08-02 20:48

Peter Villadsen wrote:
> Hejsa,
>
> Findes der metoder i C++, således at signaler kan mappes om til Exceptions.
> Helt konkret drejer det sig om noget købe middleware, som er skyld i
> signalet SIGSEGV. Og det vil jeg mægtig gerne mappe om til en exception i
> stedet for et signal.
>
> Nogle ideer ?


Har aldrig prøvet, men jeg ville *gætte* på at en signal-handler der
smed en exception ville have ca. den effekt...


--
mvh. Esben
home.worldonline.dk/~mesben


Peter Villadsen (19-08-2002)
Kommentar
Fra : Peter Villadsen


Dato : 19-08-02 05:41


"Esben Mose Hansen" <esben@SLETMIGoek.dk> wrote in message
news:3D5FF9FF.9060909@SLETMIGoek.dk...
> >
> > Nogle ideer ?
>
>
> Har aldrig prøvet, men jeg ville *gætte* på at en signal-handler der
> smed en exception ville have ca. den effekt...
>

Har prøvet. Men det er noget med at signal handleren er uden for "Local
Scope", og derfor er der ikke noget der kan fange den exception
signal-handleren smider.

Mvh. Peter Villadsen



Anders J. Munch (19-08-2002)
Kommentar
Fra : Anders J. Munch


Dato : 19-08-02 08:51

"Esben Mose Hansen" <esben@SLETMIGoek.dk> wrote:
> Peter Villadsen wrote:
> > Hejsa,
> >
> > Findes der metoder i C++, således at signaler kan mappes om til
Exceptions.
> > Helt konkret drejer det sig om noget købe middleware, som er skyld i
> > signalet SIGSEGV. Og det vil jeg mægtig gerne mappe om til en exception
i
> > stedet for et signal.
> >
> > Nogle ideer ?
>
>
> Har aldrig prøvet, men jeg ville *gætte* på at en signal-handler der
> smed en exception ville have ca. den effekt...

Nej, desværre. Når der kommer et asynkront signal, kan stakken være i en
uspecificeret mellemtilstand, og den stack unwinding der følger af at smide
en exception kan gå grueligt galt.

Derfor: I almindelighed, nej, det kan man ikke. Kun hvis en specifik
implementation garanterer det.

mvh. Anders



Ivan Johansen (19-08-2002)
Kommentar
Fra : Ivan Johansen


Dato : 19-08-02 09:01

"Esben Mose Hansen" <esben@SLETMIGoek.dk> wrote in message
news:3D5FF9FF.9060909@SLETMIGoek.dk...
> Peter Villadsen wrote:
> Har aldrig prøvet, men jeg ville *gætte* på at en signal-handler der
> smed en exception ville have ca. den effekt...

I følge §18.7/5 i C++ standarden skal en signal handler være en POF (plain
old function), hvilket vil sige at den ikke må gøre noget der ikke kan gøres
i C. Alt andet er implementation defined. Specielt siger note 213:
"In particular, a signal handler using exception handling is very likely to
have problems"

Da signaler er asynkrone kan de forekomme overalt. Hvis en signal handler
smider en exception, kan man derfor risikere at få exceptions fra funktioner
der garenterer at de ikke smider exceptions. Det vil være umuligt at lave
noget exception safe.

Man bør derfor kun sætte et flag i en signal handler.

Ivan Johansen



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste