【发布时间】:2014-04-25 20:59:10
【问题描述】:
我目前正在向我的应用程序添加一项允许它重新启动的功能。
这是主要的样子
int main(int argc, char *argv[])
{
const int RESTART_CODE = 1000;
int return_from_event_loop_code;
QPointer<QApplication> app;
QPointer<foo> main_window;
do
{
if(main_window)
delete main_window;
if(app)
delete app;
app = new QApplication(argc, argv);
main_window = new foo();
main_window->show();
app->setActiveWindow(main_window);
return_from_event_loop_code = app->exec();
}
while(return_from_event_loop_code==RESTART_CODE);
return return_from_event_loop_code;
}
现在第一次运行良好,但是当使用下面提到的RestartApp 方法重新启动应用程序时。 QNetworkAccessManager的get方法返回锁错误。这就是我的代码的样子
void foo::MethodA()
{
....
....
QUrl url("some url");
QNetworkRequest request;
request.setUrl(url);
networkManager = new QNetworkAccessManager(this);
QObject::connect(networkManager, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished(QNetworkReply*)),static_cast<Qt::ConnectionType>(Qt::QueuedConnection | Qt::UniqueConnection));
currentReply = networkManager->get(request); //Crashes when the app is restarted again
connect(currentReply, SIGNAL(error(QNetworkReply::NetworkError)),this, SLOT(slotNetworkError(QNetworkReply::NetworkError)),Qt::UniqueConnection);
}
//Slot
void foo::replyFinished(QNetworkReply* rply)
{
....
.....
rply->deleteLater();
}
//Slot
void foo::RestartApp()
{
QCoreApplication::exit(1000);
}
现在,当应用程序第一次启动时会发生什么,一切都很好。但是,当调用 RestartApp 方法并且这次在 MethodA 中的语句 currentReply = networkManager->get(request); 再次调用 main 中的 return_from_event_loop_code = app->exec(); 方法时,应用程序崩溃并最终在
mlock.c
void __cdecl _unlock (
int locknum
)
{
/*
* leave the critical section.
*/
LeaveCriticalSection( _locktable[locknum].lock );
}
知道为什么应用程序在收到重启指令时会在 QNetworkAccessManager 的 get 语句中崩溃吗?
【问题讨论】:
标签: c++ qt sockets qnetworkaccessmanager qnetworkrequest