이것은 내 코드입니다. 그러나 나는 어디에서 m_networkManager
을 삭제해야하는지 혼란 스럽다. 내가 할 수있는 onRequestCompleted()
슬롯하지만 문제는 내 프로그램 getData 함수를 자주 호출합니다.언제 QNetworkAccessManager 포인터를 삭제 하시겠습니까?
getData()
가 호출 :내 두려움이 경우입니다.
onRequestCompleted()
슬롯이 실행되기 전에 나의 프로그램에서getData()
을 다시 호출합니다.onRequestCompleted()
첫 번째getData()
통화가 시작됩니다.- 내 프로그램은
getData()
이 두 번째로 호출 될 때 실제로 다른 메모리에 할당 된 m_networkManager를 삭제합니다.
나는이 상황이 충돌을 일으킬 수 있다고 생각합니다. 할 때마다 MyApp::getData()
라는 새로운 QNetworkAccessManager
인스턴스를 생성하기 때문에
void MyApp::getData() {
QNetworkRequest request;
request.setUrl(QUrl("http://www.domain.foo"));
m_networkManager = new QNetworkAccessManager(this); // Instance variable
connect(m_networkManager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(onRequestCompleted(QNetworkReply *)));
m_networkManager->get(request);
}
void MyApp::onRequestCompleted(QNetworkReply *reply) {
QByteArray data = reply->readAll();
reply->deleteLater();
//m_networkManager->deleteLater();
}
각 요청마다 새로운 QNetworkAccessManager를 만드는 이유는 무엇입니까? – thuga