2012-04-27 4 views
2

사용자가 모든 업로드를 취소 할 수있는 응용 프로그램에서 작업합니다. 이제 QNAM에서 모든 응답을 검색하거나 삭제하고 모두 중단 할 것을 기대해야하는지 궁금합니다.QNetworkAccessManager 소멸자가 현재 요청을 중단합니까?

중단에 대해 아무 것도 진술하지 않은 문서에는 없지만 나는 그렇게 할 것이라고 가정합니다.

QNetworkAccessManager 개체를 삭제하고 모든 리소스를 비 웁니다. 이 클래스에서 반환 된 QNetworkReply 객체는이 객체를 부모로 설정 했으므로 QObject :: setParent()를 호출하지 않으면 해당 객체와 함께 삭제됩니다.

편집 : 은 (또한 그 위에 소유권을하고 retrys 등 수행) 소멸자에서 신호가 중단으로 aswell QNetworkReplys을 끊 모두 모든 응답에 대한 래퍼를 사용하여 종료. 래퍼 (부모 -> 자식)와 함께 삭제됩니다.

답변

2

그냥 응답을 삭제합니다. 소스에서 :

QNetworkAccessManager::~QNetworkAccessManager() 
{ 
    // ... 

    qDeleteAll(findChildren<QNetworkReply *>()); 

    // ... 
} 

그리고 QNetworkReply의 소멸자 비어 있습니다, 그래서 당신은 수동으로 중지해야합니다.

+0

예. 그렇기 때문에 문서에 명시된 내용을 전적으로 알고 계십시오. QNAM을 삭제하기 전에 (모든 업로드 취소) 모든 답장을 중단해야만하는지 궁금합니다. – chikuba

+0

@chikuba 'abort()'를 호출하는 QNetworkReply 소멸자의 소스에는 아무것도 없습니다. – Anthony

+0

@chikuba - 그렇습니다. 그렇지 않으면 더 이상 유효하지 않은 포인터를 사용하려고 할 것이기 때문입니다. 정의되지 않은 동작입니다. –

관련 문제