0

我使用 QNetworkAccessManager 来处理发送一个 http 请求:

void f()
{    
    QNetworkRequest request( QUrl( address ) );    
    QNetworkAccessManager mng;
    mng.get(request);
    //QEventLoop().exec();
    }
void main()
{
    ...
    f();
    ...
}

如果没有 QEventLoop().exec(); 行,应用程序将不会发送请求。但是如果使用 QEventLoop().exec(); 行,它会的。我不明白为什么?
你能清除我吗?
非常感谢!(P/s:我看过这个链接:Sending an HTTP request using QNetworkAccessManager

4

1 回答 1

0
void f()    
{        
    static QNetworkRequest request( QUrl( address ) );        
    static QNetworkAccessManager mng;
    mng.get(request);
}
void main()
{
    ...
    f();
    ...
}

我认为这是因为 QNetworkAccessManager 是异步的,需要时间来发送请求。但是 require, url, query, ... 在超出范围时会被销毁。-> 当 QNetworkAccessManager 发送请求(使用 QEventLoop().exec(); )或让 require、url、query ......是持久的(用静态声明它)时,我们需要在范围内。

于 2013-05-11T07:57:15.000 回答