06. juni 2002 - 23:18Der er
13 kommentarer og 3 løsninger
Mit program crasher...
Jeg har lavet et program, som viser uptime for windows. Programmet skal køre hele tiden, og lukke sammen med Windows. Jeg kører Windows XP, og når jeg lukker Windows, så står den lidt, og så lukker den mit program. Men næste gang jeg starter programmet kan jeg se at det ikke blev lukket korrekt, det udførte aldrig OnClose-eventen. (Jeg har lavet programmet sådan at jeg kan se det) Hvorfor gør den ikke det, og hvad gør jeg ved det ?
Du kan hente programet her: http://users.cybercity.dk/~dsl47489/WinUpTime.exe Der er ingen message box, kun en timer der kører. OnClose bliver ikke udført, for hvis den gjorde ville den gemme nogle variabler i en fil, og det gør den ikke.
Jeg tror du skal ændre din metode lidt... Hvis programmet bliver terminated, sendes der ikke flere events til det og du er altså ikke garanteret nogen "afsluttende" message!
Istedet kan du opdatere dine variable i din timer, således det altid vil virke. Hvis du gør det, virker det fx også hvis man ta'r strømmen fra maskinen!
Du får kun OnClose() event'en på din hovedform - og i fbm. nedlukning af Windows, kun såfrem OnCloseQuery ikke begynder at smide en dialog op osv. Jeg mener at have set at der også er en Application->OnTerminate() event - det er i givet fald den du skal overloade. Du skal i den sammenhæng være opmærksom på at Windows ikke giver dig uanet tid til at lave din afslutning korrekt.
jpk >> Aner det ikke - det er det der er så smart ved BCB
nubi19 >> En god måde at lave "crash" detection på, er at skabe en log fil ved opstart, og så slette den igen ved normal afslutning. Hvis "skidtet" crasher inden, kan du så se det vha. log-filen. (Det er også sådan Windows selv gør.)
soepro > Det er også det jeg gør, men problemet er at når jeg lukker windows, så får den ikke lukket programmet rigtigt, og så bliver den log fil ikke slettet :(
Godt nok ændrer jeg bare indholdet af log-filen istedet for at slette den, men tankegangen er den samme.
Hehe ups, koden er måske lidt forældet, idet jeg har rettet lidt i den mht. den der sprintf(TUpTime.........). Men pyt, og det kunne nok optimeres en del :( Anyway jeg kan ikke lige finde nogen Application->OnTerminate().
Okey, ved lidt nærlæsning havde den noget med musen at gøre :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.