2014-11-08 66 views
0

我的應用程序凍結。Qt應用程序凍結<QLlnkedList <QUrl> *>從NetworkAccessManager->的get()回調時,我想一個<code>QNetworkAccessManager</code>的<code>replyFinished(QNetworkReply* networkReply);</code>時隙內訪問<code>QList<QLinkedList<QUrl>* ></code>

我基本上是一次循環在列表中添加一些東西到列表,然後退出函數:

foreach (QLinkedList<QUrl>* list, mList) { 
    if (list->front() == url) { 
     list->prepend(someUrl); 
     mNetworkAccessManager->get(someUrl); 
     return; 
    } 
} 

在其他情況下我執行以下操作:

QList<QLinkedList<QUrl>* >::iterator it = mList.begin(); 
while (it != mList.end()) { 
    QLinkedList<QUrl>* list = *it; 
    if (list->front() == networkReply->url()) { 
     // some operation with list->back(); 
     mList.erase(it); 
     delete list; 
     break; 
    } 
} 

有什麼辦法使這個構造安全嗎?

+1

指針到URL的鏈接列表這份名單似乎很可怕。我有一個詞給你 - 調試。 – dtech 2014-11-08 16:18:12

+0

是的,請勿使用指針 – RobbieE 2014-11-09 08:08:12

+0

即使我不使用指針,我的應用程序也會崩潰。我認爲原因是slot'replyFinished'被多次調用,'QList'和'QLinkedList'不是線程安全的。 – Niklas 2014-11-09 12:19:59

回答

0

我陷入了一個死循環,因爲

QList<QLinkedList<QUrl>* >::iterator it = mList.begin(); 
while (it != mList.end()) { 
    QLinkedList<QUrl>* list = *it; 

從未增加了迭代器..

相關問題

 相關問題