这几天测试W5100,一款内置tcp协议的网络芯片的速度,下位机用FPGA往芯片写数据,80纳秒也一次,按照计算,理论传输速度单向应为12.5Mbps
用官方自带的软件测试,可以达到数值为25Mbps。通过任务管理器的联网看,占用在79%左右
用QT自己写的程序,不停的接收,每次记录缓存数目,1s记下总值,速度显示为8.35Mbps,互联网占用67%
因为这个程序没有涉及数据的保存方面,仅仅是进行了一个readall,所以比较困惑为什么接收速度上不去,而且自己写的程序当打开浏览器时,会出现速度掉到500k左右,不太明白这是因为什么
求指教,下面的是代码,用movetothread,把tcp的类挪到线程单独运行
//==============================================================/
#ifndef QT_THREAD_TCPSPEEDTEST02_H
#define QT_THREAD_TCPSPEEDTEST02_H
#include <QtGui/QMainWindow>
#include "ui_qt_thread_tcpspeedtest02.h"
#include "Nthread.h"
class QT_Thread_TcpSpeedTest02 : public QMainWindow
{
Q_OBJECT
public:
QT_Thread_TcpSpeedTest02(QWidget *parent = 0, Qt::WFlags flags = 0);
~QT_Thread_TcpSpeedTest02();
private:
Ui::QT_Thread_TcpSpeedTest02Class ui;
private slots:
void on_pushButton_3_clicked();
void on_pushButton_clicked();
signals:
void sigCom(QString Addr,quint16 port);
};
#endif // QT_THREAD_TCPSPEEDTEST02_H
//==============================================================//
#include "qt_thread_tcpspeedtest02.h"
#include "Nthread.h"
#include <QThread>
#include <QTimer>
Nthread T1;
QThread *Qth1=new QThread;
QTimer time1;//定时器的存在,通过任务管理器看不出速度有什么影响,都是67%
QT_Thread_TcpSpeedTest02::QT_Thread_TcpSpeedTest02(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
qDebug()<<"Main thread:"<<QThread::currentThreadId();
T1.moveToThread(Qth1);
Qth1->start();
Qth1->setPriority(QThread::TimeCriticalPriority);
connect(this,SIGNAL(sigCom(QString,quint16)),&T1,SLOT(newCon(QString,quint16))),Qt::QueuedConnection;
connect(&T1,SIGNAL(readyRead()),&T1,SLOT(read())),Qt::BlockingQueuedConnection;
connect(&T1,SIGNAL(ThrStat(QString)),ui.label_2,SLOT(setText(QString)));
connect(&time1,SIGNAL(timeout()),&T1,SLOT(getSpeed()));
connect(&T1,SIGNAL(SpeedShow(QString)),ui.label,SLOT(setText(QString))),Qt::QueuedConnection;
}
QT_Thread_TcpSpeedTest02::~QT_Thread_TcpSpeedTest02()
{
}
void QT_Thread_TcpSpeedTest02::on_pushButton_clicked()
{
QString addr=ui.lineEdit->text();
quint16 por=ui.lineEdit_2->text().toULong();
emit sigCom(QString(addr),quint16(por));
}
void QT_Thread_TcpSpeedTest02::on_pushButton_3_clicked()//启动测速
{
time1.start(1000);
}
//============================================================================//
#ifndef NTHREAD_H
#define NTHREAD_H
#include <QTcpSocket>
class Nthread:public QTcpSocket
{
Q_OBJECT
public:
Nthread();
~Nthread();
quint64 Mount;
private slots:
void newCon(QString Addr,quint16 port);
void read();
void getSpeed();
void multiCon();
signals:
void ThrStat(QString stat);
void SpeedShow(QString spd);
};
//============================================================================//
#include "Nthread.h"
#include <QThread>
#include <Windows.h>
#include <QTimer>
Nthread::Nthread()
{
Mount=0;
}
Nthread::~Nthread()
{
Mount=0;
}
void Nthread::newCon(QString Addr,quint16 port)
{
QTcpSocket::connectToHost(Addr,port);
if (QTcpSocket::waitForConnected(1000))
{
emit ThrStat(QString("Link OK"));
qDebug()<<"link ok";
qDebug()<<"Nthread thread:"<<QThread::currentThreadId(); //查看线程
}
else
{
emit ThrStat(QString("Link fail"));
qDebug()<<"link fail";
qDebug()<<"Nthread thread:"<<QThread::currentThreadId(); //查看线程
}
}
void Nthread::read()
{
if (QTcpSocket::bytesAvailable()!=0)
{
Mount=Mount+QTcpSocket::bytesAvailable();
QTcpSocket::readAll();
qDebug()<<"read all";
}
else
{
qDebug()<<"none to read";
}
//Sleep(0);
}
void Nthread::getSpeed()
{
QString spd=QString::number(Mount);
emit SpeedShow(QString(spd));
Mount=0;
}
void Nthread::multiCon()
{
}
#endif