• 6889阅读
  • 6回复

QT编程测试TCP接收速度无法超8M,求解答 [复制链接]

上一主题 下一主题
离线alix0083
 

只看楼主 倒序阅读 楼主  发表于: 2011-08-04
这几天测试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



离线alix0083

只看该作者 1楼 发表于: 2011-08-04
另外,从板卡的数码管的刷新速度来看,速度也的确是上不去
离线wxj120bw

只看该作者 2楼 发表于: 2011-08-05
回 1楼(alix0083) 的帖子
其他方式socket实现速度怎么样?
离线alix0083

只看该作者 3楼 发表于: 2011-08-05
回 2楼(wxj120bw) 的帖子
昨天又看了看官方的AX1那个测速软件的流程,照葫芦画瓢试验了下循环收发,从windows任务管理器上看,联网的占用比官方程序还要大,同时问了下技术支持,只得到所谓的有效数据25m概念,至今不知道到底啥东西,看来得先查看下tcp协议去==;
另外,同事接触过这方面的说,看任务管理器占用就大约能对比出速度。。。so。。他们认为我这个程序应该没问题,速度应该是正确的
udp还没有测,用fpga写的话需要些时间,同事在画板没时间弄
先凑合弄吧,一头雾水哎╮(╯▽╰)╭
离线wxj120bw

只看该作者 4楼 发表于: 2011-08-05
回 3楼(alix0083) 的帖子
一直没对网速有过探索  不知道 任务管理器“占用”是指占用什么 还有你是做FPGA(现场可编程逻辑阵列)吗
离线alix0083

只看该作者 5楼 发表于: 2011-08-06
调出任务管理器,有个联网的标签,我同事告诉我说看那里面网络应用的百分比就行
fpga代码不是我写。。
离线wxj120bw

只看该作者 6楼 发表于: 2011-08-07
回 5楼(alix0083) 的帖子
原来网络应用是这个作用 一直都没有关注 哪你是在fpga上层系统上写程序了
快速回复
限100 字节
 
上一个 下一个