Avatar billede lytzen Nybegynder
27. oktober 2000 - 02:57 Der er 7 kommentarer og
1 løsning

Uptime igen igen

Hmm, ja jeg var lidt for hurtig med mine points sidst. Nedenstående er et eksempel jeg tidligere har modtaget som svar. Koden returnerer den tid computeren har været tændt. Problemet er bare at funktionen tager en integer med ind, hvilket ikke er hensigsmæssigt. Jeg går ud fra at gettickcount på et eller andet tidspunkt returnerer en værdi over 2147483647, som er en integers maxværdi, og derfor får funktionen til at returnere noget forkert. Hvilke andre muligheder har jeg ? Hvis jeg bruger en double kan jeg ikke brude div og mod.


unit UptimeGrO;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Panel1: TPanel;
    Label1: TLabel;
    function Duration(ms: integer):string;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

const
  cSec  =      1000;
  cMin  = cSec  * 60;
  cHour = cMin  * 60;
  cDay  = cHour * 24;

implementation

{$R *.DFM}

function Tform1.Duration(ms: integer):string;
var
  FDay: Integer;
  FHour: Integer;
  FMin: Integer;
  FSec: Integer;
  FTotal: Integer;
  temp: string;
begin
  Fday:=0; Fhour:=0; Fmin:=0; Fsec:=0; FTotal:=0; temp:=\'\';

  FDay := ms div cDay;
  Ftotal:=ms mod cday;
  FHour := Ftotal div cHour;
  Ftotal:=Ftotal mod chour;
  FMin := Ftotal div cMin;
  Ftotal:=Ftotal mod cmin;
  FSec := Ftotal div cSec;
  temp := temp + inttostr(Fday)+\' days \';
  temp := temp + inttostr(Fhour)+\' hours \';
  temp := temp + inttostr(Fmin)+\' mins \';
  temp := temp + inttostr(Fsec)+\' secs \';
  result:=temp;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  label1.Caption:= duration(gettickcount);
end;
end.
Avatar billede dj Nybegynder
27. oktober 2000 - 07:26 #1
nej Gettickcount returnerer ganske rigtigt en Integer, men det gør den også i Windows, så det vil sige at ligegyldigt hvad du laver den om til så vil det stadigvæk være en integer i Windows der holder øje med tiden. Jeg mener begrænsningen ligger på nogen og 48 dage eller noget lignende. og så kan du jo evt. checke på hvornår gettickcount ligepludselig bliver mindre end OnlineStart for så at bare at plusse de 48 dage (eller hvor lang tid det nu er) til det du får ud i duration
Avatar billede dj Nybegynder
27. oktober 2000 - 07:31 #2
det skal siges at mIRC har samme begrænsning :)
Avatar billede borrisholt Novice
27. oktober 2000 - 08:29 #3
Definitionen af  GetTickCount() : (ifgl MSDN)
  DWORD GetTickCount(VOID);

Det løber ganske rigtigt hurtigt over .... Retur værdien af GetTickCount() kan du ikke lave så meget om på ...

I stedet kan du måle boot tidspunktet i det den er lageret i en 64 bits integer, og derfor ikke så let løber over ....

Og ja det har jeg kode till at gøre ....

Jens B
Avatar billede poull Nybegynder
27. oktober 2000 - 12:24 #4
Man kan da bare selv hold styr på om den løber og så tælle en anden integer op for hver gang den løber over. Dermed får du en LANGT længere periode.

Hvor lang tid har du da brug for ?
Avatar billede loproc Praktikant
29. oktober 2000 - 14:52 #5
Kan man ikke lave det med en LongInt i stedet for en almindelig Integer. Jeg mener at LongInt kan rumme et større tal end Integer kan.
Avatar billede dj Nybegynder
29. oktober 2000 - 19:44 #6
poull>> jep, det bare ligepræcis hvad jeg prøvede at sige :)

loproc>> Det nytter jo ikke noget når returværdien af GetTickCount ikke er en int64.

Borrisholt>> Som spurgt tidligere er jeg meget interesseret i den kode du har der måler fra boottidspunktet, jeg vil godt give nogle point eller noget for den hvis du synes.
Avatar billede borrisholt Novice
30. oktober 2000 - 08:49 #7
DJ> Er det dig der er Thomas Lytzen ? Hvis det ikke er så send en e-mail til Jens@Borrisholt.com.

Så kan du få koden til det efterspurgte ...

Jens B
Avatar billede dj Nybegynder
30. oktober 2000 - 09:03 #8
ok, jeg er nemlig ikke Thomas Lytzen :)
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