DIRE DEPUIS COMBIEN DE TEMPS TOURNE LE PC(GETTICKCOUNT - EXEMPLE D'UTILISATION)
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 2013
-
29 mars 2005 à 23:55
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 2006
-
9 avril 2005 à 11:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 9 avril 2005 à 11:36
Faut vraiment pas se fatiguer pour sortir GetTickCount...
Vos commentaires sont marrants, mais NTDLL n'est bien sûr pas toujours fourni. C'est peut-être idiot comme question, mais est-ce que NTdll est compatible avec 98 ? Au passage, si on ne fait pas n'importe quoi, W98 est très stable. C'est juste que les logiciels le rendent de moins en moins compatible.
Pour simple rappel, Win98 est un système d'exploitation. Japee semblait l'oublier. Et sinon, je n'ai pas compris ce que son code apporte de plus par rapport à celui sur lequel on cause.
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 1 avril 2005 à 18:36
Comme ça, on pourra faire une moyenne du temps que met Windows pour planter. On enverrai les données à Mister Billy pour qu' il implante dans une prochaine revision de Windows un système qui aviserai l' utilisateur lorsque l' on s' approcherai trop (dans le temps) d' un potentiel plantage!
J' ai même une idée pour le message (en Anglais biensûr, cela va de soi):
Caption := 'Hypotetic instable system';
Text := 'Incoming critical error: shutdown manually or Windows will restart automatically in ' + tempsRestant;
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 1 avril 2005 à 17:46
Pour rester dans le ton, et sans changer de sujet, j'aurais fait comme ça :
procedure WinPasPlanteDepuis;
var jours, heures, minutes, secondes, millisecondes: integer;
begin
Millisecondes := GetTickCount;
Secondes := Millisecondes div 1000;
Millisecondes := Secondes mod 1000;
Minutes := Secondes div 60;
Secondes := Secondes mod 60;
Heures := Minutes div 60;
Minutes := Minutes mod 60;
Jours := Heures div 24;
Heures := Heures mod 24;
MessageDlg(
Format('Ce PC n''a pas planté depuis: %d jours, %d heures, %d minutes, %d secondes et %d millisecondes, félicitations !',
[jours, heures, minutes, secondes, millisecondes]),
mtInformation,
[mbOK],
0);
end;
Bonne prog' :p
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 31 mars 2005 à 18:58
GetTickCount est la mode cette année :)
Pour répondre à DelphiProg, Microsoft prépare une nouvelle version de Windows pour les avions (baptisé WinCrash) et un autre, pour diriger les centrales nucléaires (le nom temporaire est WinRadiate) !!!
Qui c' est qui veut prendre l' avion de Billou?
retaks666
Messages postés286Date d'inscriptionjeudi 2 janvier 2003StatutMembreDernière intervention16 juillet 2007 30 mars 2005 à 14:09
Merci de vos commentaires, je vais faire une mise a jour a l'occase avec tous vos aids exemples!
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 30 mars 2005 à 13:38
ben oui Delphiprog, déjà celui grace auquel on a cette page en ce moment et tous les serveurs en général, certaines grosses stations de travail pour diverses raisons (j'en ai dont acte), etc...
Avec les systèmes stables depuis win2k, on ne peut plus raisonner comme avec les winbébés.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 30 mars 2005 à 13:15
Un pc sous windows qui tournerait plus de 49.7 jours sans être rebooté, ça existe ? ;o)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 30 mars 2005 à 01:27
C'est toujours plus causant avec une démo.
Je vous laisse traduire c'est pas dans mes compétences.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 30 mars 2005 à 01:14
Salut,
ne pas oublier que GetTickCount() est limité à 32 bits (49.7 jours maxi) et assez imprécis.
Pour précision absolue et quasi illimité en temps à l'échelle humaine c'est ZwQuerySystemInformation() de ntdll.dll qu'il faut employer.
ciao...
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 29 mars 2005 à 23:55
Petit reproche à ton code : en faisant appel plusieurs fois à GetTickCount, tu fausses un peu la mesure.
Comme certains calcules reviennent souvent (1000 * 60 * 60 *24), il faudrait penser soit à les calculer une fois pour toutes ou alors employer les constantes définies dans SysUtils.pas.
Ce qui réduirait le code à :
var
jours, heures, minutes, secondes, millisecondes: integer;
Reste: cardinal;
begin
//un seul appel à GetTickCount !
Reste := GetTickCount;
jours := Reste div MSecsPerDay;
Reste := Reste - jours * MSecsPerDay;
heures := Reste div (MinsPerHour * SecsPerMin * MSecsPerSec);
Reste := Reste - (heures * MinsPerHour * SecsPerMin * MSecsPerSec);
Minutes := Reste div (SecsPerMin * MSecsPerSec);
Reste := Reste - (Minutes * SecsPerMin * MSecsPerSec);
Secondes := Reste div MsecsPerSec;
A vérifier que je ne me sois pas trompé dans les calculs.
Quoi qu'il en soit, nos deux méthodes devraient donner un résultat légèrement différent de quelques millisecondes puisque tu fais plusieurs appels à GetTickCount alors que je n'en fais qu'un seul.
9 avril 2005 à 11:36
Vos commentaires sont marrants, mais NTDLL n'est bien sûr pas toujours fourni. C'est peut-être idiot comme question, mais est-ce que NTdll est compatible avec 98 ? Au passage, si on ne fait pas n'importe quoi, W98 est très stable. C'est juste que les logiciels le rendent de moins en moins compatible.
Pour simple rappel, Win98 est un système d'exploitation. Japee semblait l'oublier. Et sinon, je n'ai pas compris ce que son code apporte de plus par rapport à celui sur lequel on cause.
1 avril 2005 à 18:36
J' ai même une idée pour le message (en Anglais biensûr, cela va de soi):
Caption := 'Hypotetic instable system';
Text := 'Incoming critical error: shutdown manually or Windows will restart automatically in ' + tempsRestant;
1 avril 2005 à 17:46
procedure WinPasPlanteDepuis;
var jours, heures, minutes, secondes, millisecondes: integer;
begin
Millisecondes := GetTickCount;
Secondes := Millisecondes div 1000;
Millisecondes := Secondes mod 1000;
Minutes := Secondes div 60;
Secondes := Secondes mod 60;
Heures := Minutes div 60;
Minutes := Minutes mod 60;
Jours := Heures div 24;
Heures := Heures mod 24;
MessageDlg(
Format('Ce PC n''a pas planté depuis: %d jours, %d heures, %d minutes, %d secondes et %d millisecondes, félicitations !',
[jours, heures, minutes, secondes, millisecondes]),
mtInformation,
[mbOK],
0);
end;
Bonne prog' :p
31 mars 2005 à 18:58
Pour répondre à DelphiProg, Microsoft prépare une nouvelle version de Windows pour les avions (baptisé WinCrash) et un autre, pour diriger les centrales nucléaires (le nom temporaire est WinRadiate) !!!
Qui c' est qui veut prendre l' avion de Billou?
30 mars 2005 à 14:09
30 mars 2005 à 13:38
Avec les systèmes stables depuis win2k, on ne peut plus raisonner comme avec les winbébés.
30 mars 2005 à 13:15
30 mars 2005 à 01:27
http://www.cppfrance.com/code.aspx?ID=27961
C'est toujours plus causant avec une démo.
Je vous laisse traduire c'est pas dans mes compétences.
30 mars 2005 à 01:14
ne pas oublier que GetTickCount() est limité à 32 bits (49.7 jours maxi) et assez imprécis.
Pour précision absolue et quasi illimité en temps à l'échelle humaine c'est ZwQuerySystemInformation() de ntdll.dll qu'il faut employer.
ciao...
29 mars 2005 à 23:55
Comme certains calcules reviennent souvent (1000 * 60 * 60 *24), il faudrait penser soit à les calculer une fois pour toutes ou alors employer les constantes définies dans SysUtils.pas.
Ce qui réduirait le code à :
var
jours, heures, minutes, secondes, millisecondes: integer;
Reste: cardinal;
begin
//un seul appel à GetTickCount !
Reste := GetTickCount;
jours := Reste div MSecsPerDay;
Reste := Reste - jours * MSecsPerDay;
heures := Reste div (MinsPerHour * SecsPerMin * MSecsPerSec);
Reste := Reste - (heures * MinsPerHour * SecsPerMin * MSecsPerSec);
Minutes := Reste div (SecsPerMin * MSecsPerSec);
Reste := Reste - (Minutes * SecsPerMin * MSecsPerSec);
Secondes := Reste div MsecsPerSec;
MilliSecondes := Reste - (Secondes * MsecsPerSec);
MessageDlg(
format('Pc lancé depuis: %d jours, %d heures, %d minutes, %d secondes et %d millisecondes',
[jours, heures, minutes, secondes, millisecondes]),
mtInformation,
[mbOK],
0);
end;
A vérifier que je ne me sois pas trompé dans les calculs.
Quoi qu'il en soit, nos deux méthodes devraient donner un résultat légèrement différent de quelques millisecondes puisque tu fais plusieurs appels à GetTickCount alors que je n'en fais qu'un seul.