Hogy mentsem C++ ban a valós időt?
Számtalan forráskód van a neten. Tudom. Ki is próbáltam 1 csomót, de valahogy nem jöttek be.
A lényeg, hogy nekem nem a program idítás kezdetének ideje kell és az eltelt másodpercek is nagyon fontosak.
A feladat az hogy mikor lefut 1 bizonyos ciklus (nem fut mindig csak ha 1 adott dolog történik) akkor vagy fájlnévként mentse az időt(ne írja felül a már lementett időpontot), vagy 1 .txt dokumentumba. Eddig a legtöbb esetben lefagyott a program mikor implementáltam a kódot. (1x mentett aztán vége)
A __TIMESTAMP__ -el és az alábbi kóddal próbálkoztam, persze feladatra szabva. (eredménytelenül)
time_t now = time(0) ;
tm *ltm = localtime(&now);
cout << 1900 + ltm->tm_year<<"."<<1+ltm->tm_mon<<"."<<ltm->tm_mday<<"-"<<1+ltm->tm_hour<<":"<<1+ltm->tm_min<<":"<< 1 + ltm->tm_sec<<endl;
cin.get();
Aki segítene annak nagyon megköszönném.
Ha többszálas a program, akkor a localtime() okozhat problémát. ( [link] )
Maga a beírt kódrészlet jónak tűnik. Esetleg érdemes utánajárni, hogy a localtime() milyen módon foglalja a memóriát, kell-e azt esetleg neked felszabadítani. A belinkelt oldalon erről nem írnak semmi. Viszont ha kell, és ciklusban fut a dolog, akkor pillanatok alatt kinyírhatja a progit a felszabadítás hiánya.
Nyilván nem ez a kódrészlet okozza a problémát...
A többit miért nem másolod ide?
És miként lehetne felszabadítani?
Nemszívesen tenném közzé a forráskódot (meg a jó fele opencv úgyh nem is lenne értelme.Már amennyiben vki ki is akarná próbálni)
Mással amúgy nem lehet baj mert tökéletesen működik a program.Csak ez üti ki.És hát semmi ördöngőset nem szeretnék az egésztől tényleg csak ennyit ami itt van.AZ aktuális idő a file nevébe.Már van egy ilyen részkódom is egy mentés formájában(ugyan ezen ciklus kapcsán). Lementi a fájlokat úgy h: file 1,2,3,... Az időt kéne csak hozzá írni (file 1-idő).
A timestamp-nél nem fagyott le, csak sajnos ott meg nem frissül az idő. Csak a program futásának kezdeti idejét adja vissza.
Hülye kérdés, de esetleg localtime-ot meglehet valahogy kerülni? És akkor nem kéne a memóriával játszani...
Közben megnéztem, nem kell, és nem is szabad felszabadítani:
Ügyesen kikerülted a szálak kérdését, de még ha nincsenek is, akkor is érdemes lehet a localtime_r/localtime_s verziókat is kipróbálni, platformtól függően. Mert ezekben tutira a saját adatodra való pointert kapod vissza, így biztonságosabb.
#include <Windows.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
SYSTEMTIME s;
GetSystemTime(&s); // UTC (koordinált világidő) időt adja vissza
std::cout << s.wYear /*meg még amit akarsz*/ << std::endl;
GetLocalTime(&s); // Ez pedig a helyi időt, asszerint mi van beállítva a gépeden
std::cout << s.wYear /*meg még amit akarsz*/ << std::endl;
return 0;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!