Cześć. Mam zmienną int minuty. Chciałbym aby co każde 60 sekund wykonało się minuty += 1.
OK.
int minutes {0};
std::thread( [&](){ while(true){ std::this_thread::sleep_for(std::chrono::seconds(60)); ++minutes ; } } ).detach();
Można trochę poprawić:
static std::atomic<int> minutes {0};
std::thread( [&](){ while(true){ std::this_thread::sleep_for(std::chrono::seconds(60)); minutes++; } } ).detach();
Ale oczywiście w tym rozwiązaniu ukryta jest odrobina ironii, związana z tak nieprecyzyjnie zadanym pytaniem.
W rzeczywistości "detached threads" ( zwanych zombie ) powinno unikać się jak ognia, a tym przypadku użycie wielowątkowości do mierzenia czasu potrzebne jest jak ręcznik rybie :)
Odpowiedź @TomaszLiMoon robi dokładnie to o co prosiłeś w pytaniu.
Natomiast w komentarzu opisałeś sytuacje która bardziej wskazuje że potrzebujesz tego https://en.cppreference.com/w/cpp/chrono
Widzę, że niektórzy się napalili na pytanie.
Tymczasem pytanie jest strasznie mgliste i w mojej opinii kwalifikuje się na problem XY.
@Sm00th opisz co ma robić twoja aplikacja, a nie jak wykonać twój pomysł na zrealizowanie jakiejś funkcjonalności.
#include <chrono>
class MinutesSince {
public:
using clock = std::chrono::steady_clock;
MinutesSince() : MinutesSince(clock ::now())
{}
MinutesSince(clock::time_point start) : m_start{start}
{}
std::chrono::minutes elpasedMinutes() {
return std::chrono::duration_cast<std::chrono::minutes>(clock::now() - m_start);
}
private:
clock::time_point m_start;
};
Powyższe jest lock free i thread safe, bez zabawy w wielowątkowość.
https://wandbox.org/permlink/pIyr5Z2BS3364Sqc