线程很新,我有线程在它们之间共享的这个 QList。他们都有自己的工作空间,GUI(模型/视图)不断地访问这个列表。然后我得到这个指向 QDataList.size() 的崩溃。调试并没有真正帮助我,因为如果我单步执行代码并且当我尝试崩溃的 qList 时,我从来没有遇到过这个问题,没有可用的信息。
所以,我的问题是:是否可以同时获取 Qlists 大小和读取对象?列表中的对象是线程安全的,不能同时被不同的线程读/写。
获取“0xC0000005:访问冲突读取位置 0xfeeefefa”。这指向我:inline int size() const in qlist.h
我浏览了调用堆栈,发现了这个:
QtCored4.dll!QListData::size() Line 98 + 0x11 bytes C++
QtNetworkd4.dll!QList<enum QNetworkReplyImplPrivate::InternalNotifications>::size() Line 137 + 0x10 bytes C++
QtNetworkd4.dll!QNetworkReplyImplPrivate::resumeNotificationHandling() Line 444 + 0xe bytes C++
QtNetworkd4.dll!QNetworkReplyImplPrivate::finished() Line 797 C++
QtNetworkd4.dll!QNetworkAccessBackend::finished() Line 313 C++
QtNetworkd4.dll!QNetworkAccessHttpBackend::replyFinished() Line 739 C++
QtNetworkd4.dll!QNetworkAccessHttpBackend::qt_static_metacall(QObject * _o, QMetaObject::Call _c, int _id, void * * _a) Line 86 + 0x8 bytes C++
QtCored4.dll!QMetaCallEvent::placeMetaCall(QObject * object) Line 525 + 0x1d bytes C++
QtCored4.dll!QObject::event(QEvent * e) Line 1195 + 0x14 bytes C++
QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 4550 + 0x11 bytes C++
QtGuid4.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3932 + 0x10 bytes C++
QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver, QEvent * event) Line 876 + 0x15 bytes C++
QtCored4.dll!QCoreApplication::sendEvent(QObject * receiver, QEvent * event) Line 231 + 0x39 bytes C++
QtCored4.dll!QCoreApplicationPrivate::sendPostedEvents(QObject * receiver, int event_type, QThreadData * data) Line 1500 + 0xd bytes C++
QtCored4.dll!qt_internal_proc(HWND__ * hwnd, unsigned int message, unsigned int wp, long lp) Line 496 + 0x10 bytes C++
每个线程都有一个执行 networkRequest 的网络管理器: