Citat:
Ursprungligen postat av
SvenHelsing
Ugh, vad plottrigt. Jag hade anvnt goto fr att ta mig ur en nstlad loop. Eller exceptions. Eller bryta ut till funktioner.
Den allmnna uppfattningen r den att exceptions ska bara anvndas vid exceptionella tillfllen. De r inte tnkta att styra programmet i stort. Ett exempel p en exception r division med noll. Och syftet r det att f till en snygg felhantering, en elegant exit, som kan anropa alla stdauppfunktioner som behvs mm.
Och dessutom f en uppgift om var det gick snett.
Det anses dlig programmeringsteknik att lta mngder med exceptionsanrop styra hela fldet.
Fr stora program med hundratals loopar s brukar de flesta allokera en timer som aktiveras d och d.
D stter man den att peka p funktionen HandleTimerEvent().
HandleTimerEvent kan d stta en (global) flagga bool terminateprogram.
Denna flagga kollas d och d i dina loopar, tex i den frsta raden:
while (villkor fr slinga 1)
som blir till:
while (villkor fr slinga 1 && !terminateprogram)
{
while(villkor fr slinga 2 && !terminateprogram)
{
while(villkor fr slinga 3 && !terminateprogram)
{
while(villkor fr slinga 4 && !terminateprogram)
{
while(villkor fr slinga 5 && !terminateprogram)
I och med att terminateprogram stts till true ifall timereventet exekveras s kommer alla looparna att avslutas.
Timern r mycket anvndbar fr d slipper man alla anrop till att kolla klockan.
S gott som alla Windowsprogram som har djupa strukturer med mnga och stora if, while- satser nvnder Timer eventet.
Man kan i och fr sig lta HandleTimerEvent() skta all uppstdning, flushing av filbuffers och filstngning och deallkolering av minne mm, och sedan avsluta programmet sjlvt, med tex exit().
Dock s kan man frlora viktig debuginformation om man ville analysera den i efterskott.
Men det finns vgar runt detta ocks.
Skriver du i Linux s br du se till att terstlla tex att stdin och stdout terkopplas tillbaks
till det aktiva terminalfnstret