2012-11-03 26 views
9

Làm cách nào để thiết lập thời gian chờ khi tôi thực hiện yêu cầu http?Thời gian chờ QNetworkReply và QNetworkAccessManager trong http request

tôi có mã này:

{ 
    QNetworkRequest request; 

    request.setUrl(QUrl("http://www.foo.com")); 
    request.setRawHeader("User-Agent", USER_AGENT.toUtf8()); 
    request.setRawHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"); 
    request.setRawHeader("Accept", 
     "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 
    request.setRawHeader("Accept-Language", "en-us,en;q=0.5"); 
    request.setRawHeader("Connection", "Keep-Alive"); 

    reply = m_networkManager->get(request); 
    QEventLoop loop; 
    connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); 
    loop.exec(); 
} 

ở đâu và làm cách nào để thiết lập một số loại thời gian chờ để yêu cầu?

Trả lời

21
QTimer timer;  
timer.setSingleShot(true); 

QEventLoop loop; 
connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit())); 
connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); 
timer.start(30000); // 30 secs. timeout 
loop.exec(); 

if(timer.isActive()) { 
    timer.stop(); 
    if(m_reply->error() > 0) { 
     ... // handle error 
    } 
    else {  
     int v = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); 

     if (v >= 200 && v < 300) { // Success 
     ... 
     } 
    } 
} else { 
    // timeout 
    disconnect(reply, SIGNAL(finished()), &loop, SLOT(quit())); 

    reply->abort(); 
} 
+2

Đừng quên xóa câu trả lời. – Dave

Các vấn đề liên quan