Działanie w czasie rzeczywistym

0

Cześć. Mam zmienną int minuty. Chciałbym aby co każde 60 sekund wykonało się minuty += 1.

6

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 :)

2

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

1

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1