1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
#include "reporter.hpp"
#include "loadinglistener.hpp"
#include <condition_variable>
#include <cstddef>
#include <mutex>
namespace Loading
{
void Reporter::addTotal(std::size_t value)
{
const std::lock_guard lock(mMutex);
mTotal += value;
mUpdated.notify_all();
}
void Reporter::addProgress(std::size_t value)
{
const std::lock_guard lock(mMutex);
mProgress += value;
mUpdated.notify_all();
}
void Reporter::complete()
{
const std::lock_guard lock(mMutex);
mDone = true;
mUpdated.notify_all();
}
void Reporter::wait(Listener& listener) const
{
std::unique_lock lock(mMutex);
while (!mDone)
{
listener.setProgressRange(mTotal);
listener.setProgress(mProgress);
mUpdated.wait(lock);
}
}
}
|