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::thread
ostd::async
? -
Se usiamo
std::async
per quanto tempo è in esecuzione la funzione cleanUp? Fino a quando il DataManager non viene distrutto? -
È considerato buono il design di eseguire un
std::async
ostd::thread
nel 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;
};