[c++] tijdsinterval programmeren

Pagina: 1
Acties:

  • Lord_T
  • Registratie: Oktober 2000
  • Laatst online: 18-04 23:39
hey,

ik zit na te denken over een simpele manier om een tijdsinterval in te programmeren in c++ en zit met het volgende:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//time1 is huidige tijd
//time2 is laatste sync tijd

  time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  int uur = timeinfo->tm_hour;
  int min = timeinfo->tm_min;
  time1 = uur*60 + min;


if(time1 < time2+15)
{   
    calculate ();
}
else
{
    time2 = time1;
    //lees map voor import
}


en dan met een go to of een while ofzo dit loopje paar keer doorlopen.... maar dan moet die iedere keer de tijd opnieuw berekenen.... das redelijk omslachtig denk ik. Kan dat niet logischer met een of andere functie? Misschien zelfs een standaard functie? Denk overigens wel dat dit zou werken...

ja ja... niet iedereen heeft dezelfde kennis... wees daarom ook eens gewillig en geef een antwoord op een vraag ;)


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15-05 03:15

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik snap er niets van, leg eens uit wat je probeert te bereiken?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Lord_T
  • Registratie: Oktober 2000
  • Laatst online: 18-04 23:39
Ik probeer voor elkaar te krijgen dat mijn programma een kwartier of een opgegeven interval kan rekenen en dan zoekt naar nieuwe data.

Daarom heb ik dus lopen zoeken hoe je de systeemtijd uit kan lezen (eerste deel) en om dan er mee te kunnen rekenen het omgezet naar een int.

Alleen zoek een logische manier en dit ziet er niet logisch uit.

ja ja... niet iedereen heeft dezelfde kennis... wees daarom ook eens gewillig en geef een antwoord op een vraag ;)


  • |sWORDs|
  • Registratie: Maart 2000
  • Laatst online: 14-04 12:48

|sWORDs|

vSphere/ESXi

hmm je bedoelt toch iets anders...

[ Voor 76% gewijzigd door |sWORDs| op 03-02-2005 12:10 ]

Te Koop:24 Core Intel Upgradeset


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15-05 03:15

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je hebt ook gewoon een time() functie, die returnt een time_t (typisch een unsigned int oid) wat gewoon het aantal seconden sinds 1 jan 1970 is. Makkelijk om mee te rekenen dus :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Op welk platform ben je uberhaupt bezig?

Professionele website nodig?


  • Lord_T
  • Registratie: Oktober 2000
  • Laatst online: 18-04 23:39
curry684 schreef op donderdag 03 februari 2005 @ 12:14:
Op welk platform ben je uberhaupt bezig?
gewoon standaard c++ (dosboxjes dus ;) ) gebruik momenteel Microsoft Visual c++ 6.0 alleen doe dus niets met het visuele aspect, omdat dit programma uiteindelijk als deel van iets anders moet gaan werken.

ja ja... niet iedereen heeft dezelfde kennis... wees daarom ook eens gewillig en geef een antwoord op een vraag ;)


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
zoiets?
code:
1
2
3
4
wachttijd = tijd+ 900000 //15 minuten //900 seconden //900000 ms
while (time() < wachttijd) {
  //je code hier
}


edit: ow en nee er klopt niks van dat weet ik, het gaat ff om de structuur

[ Voor 31% gewijzigd door BasieP op 03-02-2005 12:30 ]

This message was sent on 100% recyclable electrons.


  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 15-05 16:07

BoAC

Memento mori

Nog een interessante link voor je clock
The clock function tells how much time the calling process has used. A timer tick is approximately equal to 1/CLOCKS_PER_SEC second. In versions of Microsoft C before 6.0, the CLOCKS_PER_SEC constant was called CLK_TCK
En hij is nog ansi-compatible ook ;)

Onder linux zou ik liever gettimeofday gebruiken

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Leuk allemaal, maar het gaat natuurlijk voor geen meter werken. Na 15 minuten zit de TS gewoon nog in zijn Calculate( ) functie, en die wordt niet plotseling onderbroken.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Misschien moet je eens naar alarm(), signal() en sleep() kijken.

  • Lord_T
  • Registratie: Oktober 2000
  • Laatst online: 18-04 23:39
MSalters schreef op donderdag 03 februari 2005 @ 12:52:
Leuk allemaal, maar het gaat natuurlijk voor geen meter werken. Na 15 minuten zit de TS gewoon nog in zijn Calculate( ) functie, en die wordt niet plotseling onderbroken.
moet je daarom iedere keer voordat je de loop ingaat de time opnieuw berekenen / updaten...?!
Neem aan van wel... alleen dan kom ik dus weer tot het bovenstaande stukje ongeveer...

Is het niet mogelijk om een variabele te hebben die altijd de tijd is zonder dat je die moet updaten? Dus mijn part van het type struct_tm ofzo?

ja ja... niet iedereen heeft dezelfde kennis... wees daarom ook eens gewillig en geef een antwoord op een vraag ;)


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15-05 03:15

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het gaat niet om het updaten, het gaat erom dat je tijdens het calculeren de tijd vaak genoeg controleert om eruit te stappen als de tijd verstreken is. Of je het nu in een variabele stopt of in een functie maakt verder weinig uit.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Lord_T schreef op donderdag 03 februari 2005 @ 12:19:
[...]

gewoon standaard c++ (dosboxjes dus ;) ) gebruik momenteel Microsoft Visual c++ 6.0 alleen doe dus niets met het visuele aspect, omdat dit programma uiteindelijk als deel van iets anders moet gaan werken.
Dat maakt niets uit, als je gewoon een Console-applicatie hebt kun je ook een message-only window met messagepump onderhouden en daarop WM_TIMER afvangen, en bovendien heb je de complete Win32 API waardoor je ook met een periodieke Waitable Timer kunt werken met een completion routine waarin je de nieuwe data inleest.

Professionele website nodig?


  • Lord_T
  • Registratie: Oktober 2000
  • Laatst online: 18-04 23:39
tja ik kan in de calculate functie wel een aantal keer de tijd berekenen..... alleen het wordt een beetje een zootje vrees ik.... Is er niet een makkelijke manier voor?

overigens heb ik even gezocht op die msdn site van Microsoft over dat alarm() en sleep() maar kan er niet echt iets goeds over vinden (zal wel aan mijn zoeken liggen :( )

sleep zet een thread op suspend maar ik heb nog nooit met threads geprogrammeerd... betekent dit dan dus trouwens dat ik mijn calculate kan suspenden en met een andere thread mijn data in moet lezen? klinkt erg moeilijk.... zeker omdat je dan nog niet weet wanneer het aangeroepen moet worden... (in princiepe iedere keer op het interval...)

ja ja... niet iedereen heeft dezelfde kennis... wees daarom ook eens gewillig en geef een antwoord op een vraag ;)


  • Lord_T
  • Registratie: Oktober 2000
  • Laatst online: 18-04 23:39
curry684 schreef op donderdag 03 februari 2005 @ 14:11:
[...]

Dat maakt niets uit, als je gewoon een Console-applicatie hebt kun je ook een message-only window met messagepump onderhouden en daarop WM_TIMER afvangen, en bovendien heb je de complete Win32 API waardoor je ook met een periodieke Waitable Timer kunt werken met een completion routine waarin je de nieuwe data inleest.
heb je daar meer info over? Dus over die periodieke waitable timer?

ja ja... niet iedereen heeft dezelfde kennis... wees daarom ook eens gewillig en geef een antwoord op een vraag ;)


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Lord_T schreef op donderdag 03 februari 2005 @ 14:18:
[...]

heb je daar meer info over? Dus over die periodieke waitable timer?
MSDN as always? :)

Professionele website nodig?


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Hoewel het natuurlijk geen zooitje hoeft te worden, je kan gewoon zoiets doen:

C++:
1
2
3
4
time_t start = time();
while (time() - start < 15*60) {
  // eg. calculate best probabilistic solution in 15min
}

Als je weet dat je vaak genoeg in je outerloop terecht komt, werkt dit prima. Maar wat dus niet werk is als "//calculate" iets doet dat heel lang duurt op zich, bv wachten op data van een socket.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
curry684 schreef op donderdag 03 februari 2005 @ 14:11:
[...]
Dat maakt niets uit, als je gewoon een Console-applicatie hebt kun je ook een message-only window met messagepump onderhouden en daarop WM_TIMER afvangen, en bovendien heb je de complete Win32 API waardoor je ook met een periodieke Waitable Timer kunt werken met een completion routine waarin je de nieuwe data inleest.
Windows hippie :+

WM_TIMER doet niets wat je niet net zo goed in ISO C++ kunt doen. Om je WM_TIMER message te ontvangen moet je namelijk je Calculate lus uit, en de Message Pump in. Dan kun je net zo goed std::time( ) checken.
Als je toch zonodig iets ingewikkelds wil doen, gebruik dan CreateTimerQueueTimer( ...WT_EXECUTEINTIMERTHREAD ... )

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1