Avatar billede nubi19 Nybegynder
06. juni 2002 - 23:18 Der 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 ?
Avatar billede jpk Nybegynder
07. juni 2002 - 08:34 #1
Er du helt sikker på OnClose ikke bliver kaldt?
Hvis du fx har lavet en message box, kan det være den bliver undertrykt, hvis Windows er ved at lukke!
Avatar billede nubi19 Nybegynder
07. juni 2002 - 10:09 #2
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.
Avatar billede chries Nybegynder
07. juni 2002 - 10:35 #3
Den bruger en borland dll jeg ikke har :-)

Prøv at smide koden op.
Avatar billede jpk Nybegynder
07. juni 2002 - 10:42 #4
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!
Avatar billede soepro Nybegynder
07. juni 2002 - 10:50 #5
jpk >> God pointe !

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.
Avatar billede jpk Nybegynder
07. juni 2002 - 10:58 #6
soepro >> Hvlken Windows message dækker OnTerminate over, ved du det?
Avatar billede nubi19 Nybegynder
07. juni 2002 - 10:59 #7
jpk meningen er sådan set at den skal notere hvis systemet crasher, og hvis win lukkes normalt skal den ikke crashe.
Men her er de DLLs der skal bruges til programmet
http://users.cybercity.dk/~dsl47489/Cdll.zip
Og her er Unit1.cpp:
http://users.cybercity.dk/~dsl47489/Unit1.txt
Avatar billede soepro Nybegynder
07. juni 2002 - 11:04 #8
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.)
Avatar billede nubi19 Nybegynder
07. juni 2002 - 11:08 #9
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.
Avatar billede nubi19 Nybegynder
07. juni 2002 - 11:10 #10
Hvordan tilgår jeg Application-OnTerminate(), altså redigerer i den ?
Avatar billede nubi19 Nybegynder
07. juni 2002 - 11:13 #11
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().
Avatar billede nubi19 Nybegynder
07. juni 2002 - 12:42 #12
Hmmm slet ikke nogen der har en god ide til hvad jeg gør ?
Synes ligesom at jeg har prøvet jeres forslag :(
Avatar billede nubi19 Nybegynder
07. juni 2002 - 12:59 #13
Har løst med frmMain->OnDestroy()
Avatar billede chries Nybegynder
07. juni 2002 - 13:07 #14
Du kunne også smide det i OnExit
Avatar billede nubi19 Nybegynder
07. juni 2002 - 13:14 #15
Det er der heller ikke nogen der hedder
Avatar billede chries Nybegynder
07. juni 2002 - 13:29 #16
Okey, ved lidt nærlæsning havde den noget med musen at gøre :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester