Есть сервер, который пересылает данные, и есть клиент, который их принимает.
На клиенте каждые 80мс. проверяю количество принятых данных... чего то не правильно рассчитывает:
class NetworkConnection : public QObject
{
Q_OBJECT
public:
explicit NetworkConnection(QObject *parent = 0);
~NetworkConnection();
private:
QTcpSocket *connection;
double m_totalReceived;
double m_totalReceivedLast;
int timeCoeff;
signals:
void downloadSpeed(double speed);
private slots:
void on_dataRead();
void on_speedMetterTimer();
};
void NetworkConnection::on_dataRead()
{
......
QDataStream input(connection);
QByteArray buf = input.device()->readAll();
m_totalReceived+=buf.size();
.....
}
void NetworkConnection::on_speedMetterTimer()
{
if (!m_needCheckDownloadSpeed)
return;
double speed = (m_totalReceived - m_totalReceivedLast) * 100 * timeCoeff;
// скорость рассчитывается в битах, т.е. 1000мс(в секунде)/80мс(интервал таймера) * 8бит
if (speed != 0)
{
emit downloadSpeed(speed);
timeCoeff = 1;
m_totalReceivedLast = m_totalReceived;
}
else
timeCoeff++;
QTimer::singleShot(80, this, SLOT(on_speedMetterTimer()));
}
Вне зависимости, от того какую задержку на отсылку на сервере ставлю, скорость на клиенте не меняется, а меняется она только в зависимости от интервала таймера QTimer::singleShot(80, this, SLOT(on_speedMetterTimer()));
ЗЫ: на сервере высылаю данные пакетами по 1024*64 байт (64К), для теста прилепил туда задержку между пакетами (которая ни на что не влияет).
Где накосячил?