Page 1 sur 1

UpTime DLL

Publié : mer. 23/mars/2005 13:27
par Heis Spiter
Comme certains l'ont remarqués, les types du PureBasic sont limité (pas taper, Fred). Or, au bout de 25 jours (environs), la fonction ElapsedMilliseconds() ne fonctionne plus (et pour cause ! ). Comme cela provoque un beau bug dans Bird Chat (et pas que dans lui !), j'ai décidé de passer par le C afin de récupérer l'uptime, le traiter, et envoyer le produit fini au PureBasic. C'est donc, ce résultat que je vous présente. Pour l'instant, ce n'est pas encore génial, la nouvelle fonction ne fonctionnera que 49,7 jours, après c'est le DWORD qui ne supporte plus. Je travaille donc avec toute une équipe de bon compagnon (ohoh :lol:), pour utiliser les fonctions pdh, mais elles sont extra complexes !
Voici comment utiliser la DLL

Code : Tout sélectionner

days = 0
hours = 0
minuts = 0
seconds = 0
If OpenLibrary(1, "UpTimeDLL.dll")
  GetUpTime = IsFunction(1, "GetUpTime")
  CallCFunctionFast(GetUpTime, 1, @days, @hours, @minuts, @seconds)
  CloseLibrary(1)
  Debug "UpTime : "+Str(days)+"d "+Str(hours)+"h "+Str(minuts)+"m "+Str(seconds)+"s."
EndIf
Le 1 se rapporte au mode de récupération. Il n'y en a qu'un pour l'instant. J'espère que le second arrivera bientôt et que ce sera le pdh.
Et pour télécharger la DLL -> http ou ftp
PS : Le code source sera disponible dans Bird Chat 2.2.

Publié : mer. 23/mars/2005 14:05
par Progi1984
Quelles pourraient être l'utilité de cette fonction ? si ce n'est pas pour déranger !

Publié : mer. 23/mars/2005 14:14
par Le Soldat Inconnu
Arriver à faire un programme qui ne plante pas au bout de 25 jours à cause de ElapsedMilliseconds()
mais seulement au bout de 49 jours
si d'ici la, windows n'a pas déjà planté :lol:

Publié : mer. 23/mars/2005 14:54
par Heis Spiter
Le Soldat Inconnu a écrit :Arriver à faire un programme qui ne plante pas au bout de 25 jours à cause de ElapsedMilliseconds()
mais seulement au bout de 49 jours
si d'ici la, windows n'a pas déjà planté :lol:
Exact ;). Windows doit bien pouvoir tenir 49 jour, non ? Enfin, j'ai encore jamais essayé :wink:.
Bon, petite MàJ. J'avais oublié un mode :oops:. Le mode 3 fonctionne comme ElapsedMilliseconds(), à la seule différence qui renvoie les secondes (3 zéros de moins, ouf :)). Et optimisation du calcul ;). Le résultat est envoyé dans le pointeur des secondes, les autres auront -1.
Vous pouvez l'utiliser comme ça

Code : Tout sélectionner

seconds = 0
If OpenLibrary(1, "UpTimeDLL.dll")
  GetUpTime = IsFunction(1, "GetUpTime")
  CallCFunctionFast(GetUpTime, 3, @seconds, @seconds, @seconds, @seconds)
  CloseLibrary(1)
  Debug "UpTime : "+Str(seconds)+"s."
EndIf
Le buffer des secondes est le dernier à être rempli. Par contre, ne mettez pas 0, sinon, vous aurez un joli plantage.

Publié : mer. 23/mars/2005 19:28
par Dorian
Oh, généralement Windows plante avant lol :jesors:
Sinon c'est une très bonne idée et j'espère que tu t'en sortira bien avec les pdh car le gain est déjà très impressionnant (quasiment le double c'est énorme)