Improved ETA calculation

This commit is contained in:
Christophe Dumez
2010-12-18 15:34:38 +00:00
parent a48ef3f94f
commit d124c24e89
6 changed files with 162 additions and 69 deletions

View File

@@ -0,0 +1,59 @@
#ifndef TORRENTSPEEDMONITOR_H
#define TORRENTSPEEDMONITOR_H
#include <QThread>
#include <QWaitCondition>
#include <QList>
#include <QHash>
#include <QMutex>
#include "qtorrenthandle.h"
class QBtSession;
class SpeedSample {
public:
SpeedSample(){}
void addSample(int s);
float average() const;
void clear();
private:
static const int max_samples = 30;
private:
QList<int> m_speedSamples;
};
class TorrentSpeedMonitor : public QThread
{
Q_OBJECT
public:
explicit TorrentSpeedMonitor(QBtSession* session);
~TorrentSpeedMonitor();
qlonglong getETA(const QString &hash) const;
protected:
void run();
signals:
private:
void getSamples();
private slots:
void removeSamples(const QString& hash);
void removeSamples(const QTorrentHandle& h);
private:
static const int sampling_interval = 1000; // 1s
private:
bool m_abort;
QWaitCondition m_abortCond;
QHash<QString, SpeedSample> m_samples;
mutable QMutex mutex;
QBtSession *m_session;
};
#endif // TORRENTSPEEDMONITOR_H