Sto scrivendo una classe che periodicamente deve controllare, se i dati che gestisce sono troppo vecchi, se è così dovrebbe cancellarlo.
Sono nuovo alla libreria multithreading C++11 e ho le seguenti domande:
-
Questa attività periodica è più adatta per
std::threadostd::async? -
Se usiamo
std::asyncper quanto tempo è in esecuzione la funzione cleanUp? Fino a quando il DataManager non viene distrutto? -
È considerato buono il design di eseguire un
std::asyncostd::threadnel costruttore?
class DataManager {
public:
DataManager() {
handle = std::async(
std::launch::async,
&DataManager:cleanUp, this);
}
...
void DataManager::cleanUp() {
while (true) {
std::this_thread::sleep_for(
std::chrono::seconds(DATA_COLLECTOR_PERIOD));
for (auto& d: dataCollection) {
if (d.isTooOld()) {
dataCollection.remove(d);
}
}
}
}
private:
std::future<void> handle;
std::vector<Foo> dataCollection;
};