这个问题困扰好几天了,请大牛们来看看。我先贴代码
按钮触发的槽:
void Amax_Test::testByStressSlot()
{
SendRequestByParallel_Dialog srbp;
Thread *pthread = NULL;
if(srbp.exec() == QDialog::Accepted)
{
int numThread = srbp.numThread; //线程数
int numRequest = srbp.ui->numRequestByThreadSpinBox->value(); //每个线程发送请求数
pthread = new Thread[numThread];
for(int i = 0 ; i < numThread ; ++i )
{
pthread.set(numRequest); //创建线程
pthread.start(); //线程开始
}
for(int i = 0 ; i < numThread ; ++i )
{
pthread.wait(); //等待所有线程执行完成
}
}
else
{
//点击取消需要处理情况
goto exit;
}
exit:
if(pthread != NULL)
{
delete[] pthread;
pthread = NULL;
}
}
自己定义的Thread继承Qthread类。
#include "Thread.h"
#include "Amax_Test.h"
#include "ui_Amax_Test.h"
#include "common.h"
#include <QMutex>
/*Thread::Thread(unsigned int numRequest)
{
this->numRequest = numRequest;
}
*/
void Thread::set(unsigned int num)
{
this->numRequest = num;//每个线程需要发送的请求数
}
Thread::Thread(QThread *parent) :QThread(parent)
{
}
Thread::~Thread()
{
}
void Thread::run()
{
QMap<QString, QString>g_m;
QUrl url("http://192.168.3.62/pv?id=12345678911&pv=1&uv=0&pu=http://www.baidu.com&sys=3&ds=1920*1200&bid=213456&mid=123456&rnd=1232037192&ty=1&cl=http://www.baidu.com&mb=xiaomi");
QNetworkRequest nr;
// for(unsigned int i = 0 ; i < this->numRequest ;++i )
//{
do_get(url, nr, g_m);
//}
}
而且想问一下,do_get方法这样写对吗?
bool do_get(QUrl url, QNetworkRequest nr, QMap<QString, QString> &m)
{
nr.setUrl(url); //设置请求Url
QNetworkAccessManager nam ;
QNetworkReply *reply = NULL;
reply = nam.get(nr); //执行Get方法
QEventLoop loop;
QObject::connect(reply,SIGNAL(finished()),&loop,SLOT(quit())); //以get方式发送数据
loop.exec();
m = finishReply(reply);
reply->deleteLater();
return true;
}