Bericht 1 van 20NL Computer Forum ~ SQL & Programmeren Van | : | Stefan de Best (Sysop) | Datum | : | 08-11-2005 |
Aan | : | Allen | MsgID | : | 2581.1 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi,
Een programma wat ik aan het schrijven ben gebruikt de instructie
GetTickCount om te berekenen hoe snel iets van Internet wordt gedownload. GetTickCount geeft een waarde in microseconden terug en is tevens de tijd (in ms dus) hoe lang Windows al draait sinds hij is opgestart. Deze waarde wordt opgeslagen in een variabele van het type
integer.
Nou las ik laatst ergens dat als de waarde een bepaalde limiet heeft bereikt dat hij automatisch weer op nul springt. Dit wilde ik wel eens testen. Ik was nog maar bij week 2, dus Windows moest nog even een paar weken langer draaien.
Bij dag 25 ofzo begon mijn programma te mekkeren. Dat bleek te liggen aan het feit dat ik de waarde die GetTickCount teruggeeft in een variabele van het type integer had opgeslagen. Een integer in de programmeeromgeving waarmee ik werk kan een maximale waarde hebben van 2147483647. Bij dag 25 was dus de maximale waarde bereikt en begon mijn programma te mekkeren. Nadat ik de integer had veranderd in
Extended-type ging het prima (max. bereik : 1.1 x 10^4932) .
Op naar wanneer die waarde op nul springt...
Dit bleek blijkbaar al na een aantal dagen (+/- 5) zo te zijn. Althans, dat denk ik want toen ik van mijn werk kwam en een toets indrukte om de beeldschermen in te schakelen bleek dit dus niet te lukken! Geen
enkele toets zorgde ervoor dat die beeldschermen aan gingen.
De enige mogelijkheid was een nog een hardware-reset van de computer. Ja, en dán springt die teller inderdaad weer op nul! <bg>
Nadat de computer opnieuw was opgestart....en de teller dus weer op nul begon
...bleek dat Windows XP een configuratie-instelling was 'vergeten', te weten: Beeldscherm uitschakelen (bij Schermbeveiliging --> Energie van Beeldscherm). Deze stond op "Nooit", terwijl ik altijd "Na 10 minuten" had.
Ik vraag me af; is het niet simpeler om gewoon softwarematig die teller op nul te zetten? ;-)
Stefan
Overzicht van 150 oude en minder bekende zwemslagen
http://tinyurl.com/yuojv[/]
Bericht 2 van 20NL Computer Forum ~ SQL & Programmeren Van | : | Peter | Datum | : | 08-11-2005 |
Aan | : | Stefan de Best (Sysop) | MsgID | : | 2581.2 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Stefan,
>>Ik vraag me af; is het niet simpeler om gewoon softwarematig die teller op nul te zetten?<<
Ik snap niet wat je bedoeld.
GetTickCount geeft inderdaad een waarde terug in ms vanaf computerstart.
Als je iets gaat downloaden bepaal je de starttijd en eindtijd door de waarde van GetTickCount op te vragen en het verschil is dan de downloadtijd in ms. Tussendoor zou je elke seconde ofzo een waarde kunnen displayen hoelang ie al bezig is en/of de resterende tijd.
Zou de waarde op 0 springen dan is de eindtijd dus kleiner dan de starttijd. Je berekening moet daar wel even op letten.
groeten, Peter
Bericht 3 van 20NL Computer Forum ~ SQL & Programmeren Van | : | Michel Uphoff (Sysop) | Datum | : | 08-11-2005 |
Aan | : | Stefan de Best (Sysop) | MsgID | : | 2581.3 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Stefan,
>> (max. bereik : 1.1 x 10^4932) .
Op naar wanneer die waarde op nul springt...
Dit bleek blijkbaar al na een aantal dagen (+/- 5) zo te zijn. <<Dan moet er iets anders mis zijn. Het genoemde getal is zo ontzettend groot, dat wij en ons zonnestelsel, en waarschijnlijk het ons bekende heelal allang verdwenen zijn voordat die waarde bij 1000 toename per seconde zijn maximum bereikt.
Michel Uphoff (Nlcomputer Forum)Homepage
Bericht 4 van 20NL Computer Forum ~ SQL & Programmeren Van | : | Stefan de Best (Sysop) | Datum | : | 08-11-2005 |
Aan | : | Peter | MsgID | : | 2581.4 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Peter,
SdB >> Ik vraag me af; is het niet simpeler om gewoon
SdB >> softwarematig die teller op nul te zetten?Peter>> Ik snap niet wat je bedoeld.Met mijn hele verhaal bedoelde ik of het misschien niet makkelijker is dat Windows
zelf die teller op nul zet, dan dat-ie mij opscheept met problemen. Met
problemen (nou ja...probleem
pjes ) doel ik dus op het feit dat ik mijn computer een hardware-reset moest geven omdat het toetsenbord niet meer wilde reageren en die 'vergeten' configuratie-instelling opnieuw moest opgeven. Maar dat is een beetje omslachtig vind ik om die teller op nul te krijgen. Immers, een reset (soft- of hardwarematig) zet die teller ook weer op nul.
Ik heb overigens geen problemen verder. Ik wilde alleen mijn ervaring met jullie delen. Maar misschien las je mijn bericht met de gedachte dat ik een probleem zou hebben. ;-)
>
Stefan
Overzicht van 150 oude en minder bekende zwemslagen
http://tinyurl.com/yuojv[/]
Bericht 5 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Stefan de Best (Sysop) | Datum | : | 08-11-2005 |
Aan | : | Michel Uphoff (Sysop) | MsgID | : | 2581.5 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Michel,
>> Dan moet er iets anders mis zijn. Het genoemde getal is zo ontzettend groot, <<
Nou, ik denk dus dat Windows gewoon niet verder kan tellen dan 30/31 dagen (maar dan in microseconden) en er dan de brui aan geeft.
Aan Delphi kan het niet liggen want daar vind ik alleen een verwijzing naar kernel32.dll waarin GetTickCount blijkbaar is gedefinieerd (of gedeclareerd....ik weet het verschil nooit <g>).
Heb jij nog geen computer met XP gehad die een maand lang achter elkaar staat te draaien?
>> Het genoemde getal is zo ontzettend groot, <<
Een Extended-type neemt 10 bytes in beslag, dus.... Ik moest wel in ene met Floatingpoint-instructies gaan werken. Maar daardoor heb ik wel een downloadsnelheid met 2 cijfers achter de komma voor in de ruil gekregen! Zelfde verhaal met de hoeveelheid data die is gedownload. :-)
Stefan
Overzicht van 150 oude en minder bekende zwemslagen
http://tinyurl.com/yuojv[/]
Gewijzigd 8/11/2005 17:36 CET door Stefan de Best (Sysop)
Bericht 6 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Peter | Datum | : | 08-11-2005 |
Aan | : | Stefan de Best (Sysop) | MsgID | : | 2581.6 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Stefan,
>> Ik wilde alleen mijn ervaring met jullie delen. <<
Dat is mooi. <g>
Als je computer gecrasht is, door jouw programma, dan zal dat nog wel vaker gebeuren. Het resetten van de 'teller' staat daar los van. Een link met '...die 'vergeten' configuratie-instelling...' zie ik dus ook niet met de 'teller', hooguit met wat je geprogrammeerd hebt. ;-)
groeten, Peter
>
Bericht 7 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Michel Uphoff (Sysop) | Datum | : | 08-11-2005 |
Aan | : | Stefan de Best (Sysop) | MsgID | : | 2581.7 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Stefan,
>> Heb jij nog geen computer met XP gehad die een maand lang achter elkaar staat te draaien? <<
Weet ik eigenlijk niet. Ik heb een aardig aantal "beheerstations" (pc's in een netwerk zonder toetsenbord/beeldscherm/muis, te bereiken via remote access), die dag in dag uit aan staan. Maar zo af en toe worden ze toch wel even herstart. Of ik over de 30 dagen heen ben gegaan, weet ik eigenlijk niet.
Bij Novell ligt dat anders, het maximum dat ik gezien heb was ruim 3,5 jaar <gg>
>> ik denk dus dat Windows gewoon niet verder kan tellen dan 30/31 dagen <<
Maar de zaak liep toch al na 5 dagen muurvast?
Michel Uphoff (Nlcomputer Forum)
Homepage
Bericht 8 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Stefan de Best (Sysop) | Datum | : | 08-11-2005 |
Aan | : | Peter | MsgID | : | 2581.8 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Peter,
>> Als je computer gecrasht is, door jouw programma,
>> dan zal dat nog wel vaker gebeuren.
Weet je wat nou de gein is? Mijn programma draaide toen helemaal niet! Zie mijn bericht aan Michel. Ik denk dat de gebruikte variabelen in GetTickCount (in kernel32.dll --> dus Windows) te laag gedimensioneerd zijn...ofzoiets. Ja, tenzij je je computer eerder uitzet (< 30 dagen), dan heb je hier never nooit geen last van.
Ik normaal gesproken ook niet, maar let wel, het was een experiment hè. ;-)
Maar weet je wat, ik laat 'm nog een maand draaien. Kijken of het nog een keer gebeurd. Ik zit nu op dag 3. 8-|
>Stefan
Overzicht van 150 oude en minder bekende zwemslagen
http://tinyurl.com/yuojv[/]
Bericht 9 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Peter | Datum | : | 09-11-2005 |
Aan | : | Stefan de Best (Sysop) | MsgID | : | 2581.9 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Stefan,
>>Maar weet je wat, ik laat 'm nog een maand draaien. Kijken of het nog een keer gebeurd.<<
De GetTickCount() declaratie in Visual Basic gaat uit van een long-integer en die gaat van –2.147.483.648 en 2.147.483.647.
effe rekenen:
1000ms * 86400 = 86400000 mseconden per dag
2147483647 is max. waarde, dus dat gedeeld door 86400000 = ongeveer 24,86 dagen
-2147483648 is min. waarde, dus ruwweg 24,86 * 2 = bijna 49,72 dagen.
Peter
Bericht 10 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Stefan de Best (Sysop) | Datum | : | 09-11-2005 |
Aan | : | Michel Uphoff (Sysop) | MsgID | : | 2581.10 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Michel,
>> Maar de zaak liep toch al na 5 dagen muurvast? <<
Nee. +/- 5 dagen nadat ik van die integer ff gauw een extended had gemaakt (dat was bij dag 25). Maar weet je, eigenlijk staat dit er helemaal los van, want het programma draaide tijdens het vastlopen helemaal niet. Ik ontdekte tijdens het experiment toevallig een bug in mijn programma die ik tussendoor even verholpen heb.
Ik verdenk nu, na jouw berichtjes, die kernel32.dll ervan. Wat mij betreft kan deze discussie nu verplaatst worden naar "Windows". Daar was het misschien sowieso beter op zijn plaats geweest. Ach, what the heck.
>>> Bij Novell ligt dat anders, het maximum dat ik gezien heb was ruim 3,5 jaar <gg>
Okééééé.
>Stefan
Overzicht van 150 oude en minder bekende zwemslagen
http://tinyurl.com/yuojv[/]
Bericht 11 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Stefan de Best (Sysop) | Datum | : | 09-11-2005 |
Aan | : | Peter | MsgID | : | 2581.11 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Peter,
>> -2147483648 is min. waarde, dus ruwweg 24,86 * 2 = bijna 49,72 dagen. <<
Ja, dat klopt. Alleen, vergeet dan niet dat de teller van Windows bij nul begint en niet bij -2147483648. ;-)
Stefan
Bericht 12 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Tony de Jonge (Sysop) | Datum | : | 09-11-2005 |
Aan | : | Stefan de Best (Sysop) | MsgID | : | 2581.12 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Stefan,
>> dat Windows gewoon niet verder kan tellen dan 30/31 dagen <<
Die ervaring heb ik eerlijk gezegd niet, ik denk eerder dat er ergens een of ander memory leak zit. Zeker gezien het feit dat toen je de variabele meer ruimte gaf het probleem eerder onstond... Ook Windows machines kunnen zeer lang draaien zonder dat ze vastlopen, op kantoor is de server de laatste anderhalf jaar 2 x gereboot, en dat was beide keren vanwege een langdurige stroomstoring (langer dan een half uur, tsja, ze zijn aan de overkant van de straat aam het bouwen geweest) die onze UPS niet kon opvangen.
TdJ
Bericht 13 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Tony de Jonge (Sysop) | Datum | : | 10-11-2005 |
Aan | : | Stefan de Best (Sysop) | MsgID | : | 2581.13 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Stefan,
>> Alleen, vergeet dan niet dat de teller van Windows bij nul begint en niet bij -2147483648 <<
Ik heb eerlijk gezegd nog nooit geprobeerd of er een negatief getal kan verschijnen, of dat het eigenlijk een unsiged value is (dus eigenlijk het dubbele). Verder telt het geheel gewoon ergens met nullen en enen en zal er naar ik denk wel gewoon een roll-over plaatsvinden, oftewel een stap van max naar 0, want als de kernelfunctie getTickCount niet tegen z'n maxvalue kon dan zouden alle Windows systemen na een vast aantal dagen vastlopen, dat was dan de afgelopen tien jaar best ontdekt (ok, ik geef toe dat Windows systemen wel een vastlopen, maar sinds NT/2000 is dat naar mijn ervaring vrijwel altijd een fout in een applicatie, helaas...)
TdJ
Bericht 14 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Stefan de Best (Sysop) | Datum | : | 10-11-2005 |
Aan | : | Tony de Jonge (Sysop) | MsgID | : | 2581.14 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Tony,
Ik heb helaas geen computer beschikbaar met een verse (standaard) installatie van WinXP die ik een tijd ongemoeid kan laten lopen. Ik heb nog wel een Pentium-75 staan (75 Mhz dus ), maar daar draait XP niet op zeker? 8-)
>Stefan
Overzicht van 150 oude en minder bekende zwemslagen
http://tinyurl.com/yuojv[/]
Bericht 15 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Stefan de Best (Sysop) | Datum | : | 10-12-2005 |
Aan | : | Tony de Jonge (Sysop) | MsgID | : | 2581.15 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Tony,
Ik ben nu ruim een maand verder dat de computer ononderbroken heeft aangestaan en hij draait nog steeds zonder problemen. Misschien dat het dan een hickup ofzo..
GetTickCount staat nu op 3000537734. Dat betekent ook dat het een 32-bits unsigned value is, toch? Ik laat 'm nog door draaien totdat de hoogste waarde van GetTickCount is bereikt. Ik wil namelijk nog steeds weten of die waarde weer op nul springt en of dat goed gaat. ;-)
>> ok, ik geef toe dat Windows systemen wel een vastlopen, maar sinds NT/2000 is dat naar mijn ervaring vrijwel altijd een fout in een applicatie, helaas...)<<
Ik werk nu alweer een tijdje met XP, maar ik moet zeggen dat dit besturingssysteem inderdaad erg stabiel is al gebied de eerlijkheid me om te zeggen dat ik wel een paar keer een BSD heb gehad waardoor ik de computer opnieuw moest starten.
Stefan
Overzicht van 150 oude en minder bekende zwemslagen
http://tinyurl.com/yuojv[/]
Gewijzigd 10/12/2005 12:31 CET door Stefan de Best (Sysop)
Bericht 16 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Tony de Jonge (Sysop) | Datum | : | 11-12-2005 |
Aan | : | Stefan de Best (Sysop) | MsgID | : | 2581.16 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Stefan,
>> GetTickCount staat nu op 3000537734. Dat betekent ook dat het een 32-bits unsigned value is, toch? Ik laat 'm nog door draaien totdat de hoogste waarde van GetTickCount is bereikt. Ik wil namelijk nog steeds weten of die waarde weer op nul springt en of dat goed gaat. ;-) <<
Voor het getTickCount probleem staat op http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/gettickcount.asp beschreven wat er gaande is.
>> al gebied de eerlijkheid me om te zeggen dat ik wel een paar keer een BSD heb gehad waardoor ik de computer opnieuw moest starten. <<
Maar ik durf te wedden dat je dit met Win9x in diezelfde tijd met soortgelijke werkzaamheden vaker zou hebben gehad. Overigens hadden de meeste problemen die ik heb gezien met devicedrivers of slechte harddisk te maken (vooral het laatste heb ik helaas voor de eigenaar een paar keer gezien)
TdJ
Bericht 17 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Stefan de Best (Sysop) | Datum | : | 11-12-2005 |
Aan | : | Tony de Jonge (Sysop) | MsgID | : | 2581.17 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Tony,
>> Maar ik durf te wedden dat je dit met Win9x in diezelfde tijd met soortgelijke werkzaamheden vaker zou hebben gehad. <<
Nou, ik ga niet zomaar een weddenschap aan, zeker als ik vantevoren weet dat ik die niet ga winnen. ;-)
Bedankt voor de link trouwens. Interessante site.
Stefan
Overzicht van 150 oude en minder bekende zwemslagen
http://tinyurl.com/yuojv[/]
Bericht 18 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Michel Uphoff (Sysop) | Datum | : | 11-12-2005 |
Aan | : | Stefan de Best (Sysop) | MsgID | : | 2581.18 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Stefan,
Bsod's in XP worden meestal veroorzaakt door driver/software problemen, soms door hardware problemen, en zeer zelden door fouten in XP.
Desalniettemin is het toch verstandig een XP bak af en toe te rebooten, al is het maar om het geheugen weer geheel vrij te geven. Ik heb regelmatig meegemaakt, dat een probleem op een xp computer dagen tevoren was veroorzaakt door een slecht stukkie code, meestal niet afsluiten van een onderdeel van een programma of bezet houden van delen van het geheugen.
De xp beheerstations op mijn werk (beheer op afstand via PcAw), worden iedere nacht om 3 uur auto herstart (mbv de taakplanner en shutdown.exe), juist om dit soort problemen te voorkomen.
Michel Uphoff (Nlcomputer Forum)
Homepage
Bericht 19 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Stefan de Best (Sysop) | Datum | : | 11-12-2005 |
Aan | : | Michel Uphoff (Sysop) | MsgID | : | 2581.19 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Michel,
Ja. Normaal gesproken had ik de computer ook allang (handmatig) opnieuw gestart, maar vanwege de test draait-ie dus nog gewoon door.
Stefan
Overzicht van 150 oude en minder bekende zwemslagen
http://tinyurl.com/yuojv[/]
Bericht 20 van 20
NL Computer Forum ~ SQL & Programmeren Van | : | Stefan de Best (Sysop) | Datum | : | 25-12-2005 |
Aan | : | Michel Uphoff (Sysop) | MsgID | : | 2581.20 |
Onderwerp | : | GetTickCount (microseconden) | Forum | : | ws-nlcomputer |
Hoi Michel,
Test met succes afgerond (zie screenshot hieronder). Kan ik eindelijk de computer opnieuw starten de onderhoud plegen! ;-)
Hoewel het verstandig is om dat met enige regelmaat te doen (computer opnieuw starten), vraag ik me af hoe lang Windows 64-bit dan wel niet kan draaien voordat er een roll-over plaatsvind. Eens kijken....
bin 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111
hex FFFF FFFF FFFF FFFF
dec 18.446.744.073.709.551.615 ms
= 213.503.982.335 dagen
= een heleboel jaartjes >
Euh, ervan uitgaande dat ze de routine GetTickCount ook als 64-bit hebben uitgevoerd natuurlijk.
Stefan
Overzicht van 150 oude en minder bekende zwemslagen
http://tinyurl.com/yuojv[/]
Prettige feestdagen en een voorspoedig en vooral gezond 2006
| Bijlagen : GetTickCount_Roll-over.jpg 7KB |
|