Avatar billede bjering Nybegynder
09. september 2004 - 20:07 Der er 16 kommentarer og
1 løsning

Tricky en, gmtime MEN med 50 sek rl tid = 5 minutter ingame tid.

okay, jeg har så en problem, for den her fatter jeg minus af..

hvordan kan det her lade sig gøre:

for hver 50 sekunder i "rigtig" tid, skal jeg sende en pakke med .. f.eks:

Fri Feb 19 04:05:00 2016
--> 50 sekunder
Fri Feb 19 04:10:00 2016
--> 50 sekunder
Fri Feb 19 04:15:00 2016
--> 50 sekunder

jeg tror i ved hvad jeg mener..

den bliver så sendt i gmtime.

jeg tænkte man måske skulle gemme tiden i registry eller sådan noget hver gang eller måske i databasen.... jeg ved ikke helt hvordan man skal gejle den..

nogen ide'er ? weblinks til noget ligende ?

takker
Avatar billede arne_v Ekspert
09. september 2004 - 20:13 #1
Umiddelbart vil jeg tro at det nemmeste var at starte en seperat tråd som
kun lavede dette - altså en uendelig med send tid ud og vent 50 sekunder.

Du skal huske at synkronisere en sådan tråds adgang til socket/whatever
med hoved trådens adgang til samme.
Avatar billede arne_v Ekspert
09. september 2004 - 20:15 #2
Selve GMT er jo nem nok - time og gmtime evt. strftime kan klare det.
Avatar billede bjering Nybegynder
09. september 2004 - 20:17 #3
jeg tænkte man måske kunne gøre sådan her.

store 1/1 00:00:00 2000 som long i databasen
så hver gang man kører en gang over time (updater tid til alle klienter) kunne man så store time som tid + 5 minutter.

men hvordan kan man gøre det? (ligge 5 minutter til en long).
Avatar billede bjering Nybegynder
09. september 2004 - 20:18 #4
ja, men man skal jo ligge 5 minutter til hver gang den kører igennem
Avatar billede arne_v Ekspert
09. september 2004 - 20:20 #5
Ah - du vil rulle 5 minutter hver 50 sekunder.

Men hvorfor skal den gemmes ? Kan den ikke bare være en variabel
i den funktion der kører løkken ?
Avatar billede bjering Nybegynder
09. september 2004 - 20:20 #6
jeg har lavet en tråd til den der Sleep(50000);

men ved ikke hvordan jeg skal fikse den der send tid ting...
det ville også være smart at store den f.eks i databasen siden jeg skal bruge den flere steder
Avatar billede arne_v Ekspert
09. september 2004 - 20:21 #7
Hvis det er fordi at du vil kunne genstarte serveren og starte det rigtige
sted, så gem den som i en simpel fil (eller i database hvis du absolut
vil det), læs den ved opstart, brug variabelen direkte men efter hver
opdatering gem den nye værdi.
Avatar billede arne_v Ekspert
09. september 2004 - 20:23 #8
Selvom du skal bruge den flere steder kan den vel godt være i memory.

En simpel global variabel eller mere avanceret et singleton objekt.
Avatar billede arne_v Ekspert
09. september 2004 - 20:24 #9
Hvis det er en socket, så er det bare et kald af send. Hvis det er en
COM port så må der være noget tilsvarende.

Husk synkronisering hvis du bruger tråde.
Avatar billede bjering Nybegynder
09. september 2004 - 20:24 #10
ja det var det jeg tænkte, men hvordan adder jeg 5 minutter til en long

f.eks (hvis database)

henter en

long servertid = (long)&mysql[2];

så skal den vel laves om til normal tid (asctime), derefter skal man fikse med minutterne vel ?
Avatar billede bjering Nybegynder
09. september 2004 - 20:27 #11
at sende den over min socket er ikke noget problem :P, men at fikse det ... det er et problem..
Avatar billede arne_v Ekspert
09. september 2004 - 20:28 #12
Hvorfor gemmer du du den ikke bare som time_t (antal sekunder siden 1. januar 1970).

Så er +5 minutter det samme som +5*60 !

Og den er nem at formatere med alle de indbyggede funtkioner.
Avatar billede bjering Nybegynder
09. september 2004 - 20:39 #13
tjah der er vel den her måde, ligger 5 minutter til rigtig tid.. men det virker bare ikke på den måde..

    time_t rawtime;
    tm * ptm;
    time ( &rawtime );
    ptm = gmtime ( &rawtime );

    ptm->tm_min = ptm->tm_min+5;


jeg skal store en tid i databasen der hedder noget med

1/1 00:00:00 2000

så hver gang jeg smutter forbi sætte den til +5 min som ovenfor, så store den efter jeg har send til alle.

tror det er en plan (om ikke andet kan jeg da prøve det).
Avatar billede arne_v Ekspert
09. september 2004 - 20:42 #14
Den går gal når den skal wrappe.

Brug:

    time_t rawtime;
    tm * ptm;
    time ( &rawtime );
    rawtime = rawtime + 5*60;
    ptm = gmtime ( &rawtime );
Avatar billede arne_v Ekspert
09. september 2004 - 20:44 #15
Der er en funktion mktime som regner den anden vej en gmtime d.v.s. fra en struct tm
til en time_t.

Du kan nemt udfylde felterne i en struct tm, kalde mktime og så har du en time_t.
Avatar billede bjering Nybegynder
10. september 2004 - 00:13 #16
okay fik det til at virke langt om længe, hvis du smider et svar arne så er point'sne dine.
Avatar billede arne_v Ekspert
10. september 2004 - 09:30 #17
svar
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