Ich muss einige Werte in einer Klasse zurücksetzen, nachdem X Sekunden vergangen sind. Ich bin mit so etwas, aber ich weiß nicht, welche Probleme es haben könnte:In C++ wie Variablen nach X Sekunden in einer Klasse zurückgesetzt werden?
class Points
{
public:
Points();
~Points();
void reset();
...
private:
int number;
static void resetAfter5seconds(Points* points);
};
Im Innern des contructor ich einen freistehenden Thread initialisieren:
Points::Points(){
thread start(resetAfter5seconds, this);
start.detach();
}
void Points::resetAfter5seconds(Points* points){
while(true){
std::this_thread::sleep_for((std::chrono::seconds(5)));
points->reset();
}
}
Dies funktioniert, aber ich weiß nicht, ob es ist der richtige Ansatz. Hat es Speicherprobleme? Was sind die Alternativen?
nick-picking: Vielleicht möchten Sie einen Mutex um alles setzen, was Sie in einem anderen Thread zurücksetzen möchten. – lorro
Sie benötigen keine "statische" Thread-Funktion, verwenden Sie einfach eine normale Member-Funktion. –
Wenn dieses Points-Objekt jemals gelöscht wird, versucht der Reset-Thread weiterhin, darauf zuzugreifen und eine Zugriffsverletzung zu verursachen. Um dies zu beheben, müssen Sie den Destruktor verwenden, um dem zurückgesetzten Thread mitzuteilen, dass es Zeit ist, die Schleife zu beenden. Warten Sie auf das Schließen des Threads, bevor Sie vom Destruktor zurückkehren. – tsandy