- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一堆 QWebViews 渲染到一个小部件上。有一点我开始收到错误 QThread::start: Failed to create thread (The access code is invalid.)
。查看 Qt 源代码,似乎 _beginthreadex
正在返回一个空句柄,而 errno 是 ERROR_INVALID_ACCESS
,但我不知道为什么。
这是错误打印时的回溯:
0 qErrnoWarning qglobal.cpp 2451 0x69ccdd3c 1 QThread::start qthread_win.cpp 469 0x69cd5831 2 QThreadPoolPrivate::tryStart qthreadpool.cpp 203 0x69ccc3f5 3 QThreadPool::start qthreadpool.cpp 474 0x69cccdf4 4 QHostInfoLookupManager::work qhostinfo.cpp 633 0x6cb9b071 5 QHostInfoLookupManager::scheduleLookup qhostinfo.cpp 652 0x6cb9b143 6 QHostInfo::lookupHost qhostinfo.cpp 202 0x6cb9a220 7 qt_qhostinfo_lookup qhostinfo.cpp 722 0x6cb9b4b6 8 QAbstractSocket::connectToHostImplementation qabstractsocket.cpp 1427 0x6cbb17f5 9 QAbstractSocket::qt_static_metacall moc_qabstractsocket.cpp 166 0x6cbb4925 10 QMetaMethod::invoke qmetaobject.cpp 1664 0x69dc784f 11 QMetaObject::invokeMethod qmetaobject.cpp 1179 0x69dc6d6b 12 QMetaObject::invokeMethod qobjectdefs.h 418 0x6cd361dd 13 QAbstractSocket::connectToHost qabstractsocket.cpp 1342 0x6cbb13b3 14 QSslSocket::connectToHostImplementation qsslsocket.cpp 1744 0x6cbc7340 15 QSslSocket::qt_static_metacall moc_qsslsocket.cpp 91 0x6cbc93cf 16 QMetaMethod::invoke qmetaobject.cpp 1664 0x69dc784f 17 QMetaObject::invokeMethod qmetaobject.cpp 1179 0x69dc6d6b 18 QMetaObject::invokeMethod qobjectdefs.h 418 0x6cd361dd 19 QAbstractSocket::connectToHost qabstractsocket.cpp 1342 0x6cbb13b3 20 QSslSocket::connectToHostEncrypted qsslsocket.cpp 422 0x6cbc55e1 21 QHttpNetworkConnectionChannel::ensureConnection qhttpnetworkconnectionchannel.cpp 607 0x6cb6191f 22 QHttpNetworkConnectionPrivate::_q_startNextRequest qhttpnetworkconnection.cpp 862 0x6cb5e92c 23 QHttpNetworkConnectionPrivate::queueRequest qhttpnetworkconnection.cpp 501 0x6cb5c57d 24 QHttpNetworkConnection::sendRequest qhttpnetworkconnection.cpp 931 0x6cb5edf2 25 QHttpThreadDelegate::startRequest qhttpthreaddelegate.cpp 291 0x6cb8912a 26 QHttpThreadDelegate::qt_static_metacall moc_qhttpthreaddelegate_p.cpp 113 0x6cbd147c 27 QMetaCallEvent::placeMetaCall qobject.cpp 525 0x69dcf91c 28 QObject::event qobject.cpp 1195 0x69dd08db 29 QApplicationPrivate::notify_helper qapplication.cpp 4551 0x2582f44 30 QApplication::notify qapplication.cpp 3933 0x25808b7 31 QCoreApplication::notifyInternal qcoreapplication.cpp 915 0x69dc0dc6 32 QCoreApplication::sendEvent qcoreapplication.h 231 0x69e35185 33 QCoreApplicationPrivate::sendPostedEvents qcoreapplication.cpp 1539 0x69dc1d2a 34 qt_internal_proc qeventdispatcher_win.cpp 496 0x69de2590 35 USER32!OffsetRect C:\Windows\syswow64\user32.dll 0 0x74cc62fa 36 ?? 0 0x152404 37 ?? 0 0x401 38 ?? 0
The code at the call looks like:
d->handle = (Qt::HANDLE) _beginthreadex(NULL, d->stackSize, QThreadPrivate::start, //d->stackSize is 0
this, CREATE_SUSPENDED, &(d->id));
if (!d->handle) {
qErrnoWarning(errno, "QThread::start: Failed to create thread");
d->running = false;
d->finished = true;
return;
}
为什么会发生这种情况,我该如何解决?
编辑:同样值得注意的是,在中断点正好有 500 个线程。
最佳答案
创建 500 个线程后,很有可能您的进程(用于线程堆栈)中的可用地址空间已用完。在 32 位 Windows 上,进程默认只能获得 2GB 的地址空间(地址空间的上半部分为内核保留)。 500 个 1MB 线程堆栈(默认大小,Qt 可能会更高或更低)加上您的进程进行的所有其他分配很容易用完。
参见 this Old New Thing article了解更多。
可能的修复:
关于c++ - 为什么 _beginthreadex 因 ERROR_INVALID_ACCESS 而失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21617623/
要定义我的头文件中的线程: class HttpClient { public: ... unsigned int __stdcall PerformLogin(void*);
下面的代码是我的整个测试程序。每次我按 ENTER 时,进程使用的 RAM 都会增加 4k(它会不断增加,不会停止;我在任务管理器中看到它)。怎么了? _beginthread 也会发生同样的事情。
如何创建静态成员函数的线程例程 class Blah { static void WINAPI Start(); }; // .. // ... // .... hThread = (HAND
我目前正在调试一个多线程应用程序,它运行时没有错误,直到某些函数被调用了大约 2000 次。之后应用程序停止响应,我可以追踪到 _beginthreadex 因内存不足错误而失败。 在 Process
是否可以向 beginthreadex 传递多个参数? 我知道我可以创建一个类或结构,但如果我有不相关的数据片段我不想合并到一个类或结构中怎么办? Boost 库似乎允许多个参数,但我该如何为标准 c
我正在尝试使用 _beginthreadex 进行一些基本的并行化,并按照我给出的示例传递参数,但它不起作用。 有什么想法吗? #include #include void MyThread(vo
我不确定我是否以正确的方式解决这个问题,但我正在使用 C++ 和 Visual Studio 2013 中的成员函数和线程。 我发现的其他答案说我必须将我的成员函数转换为静态函数,这样我就可以创建该线
我有点困惑为什么 _beginthreadex() 没有启动我的线程。基本上,我有一个线程: 编辑 #3 -- 添加了 while() 作为我代码的一部分,但我最初从未声明过,因此该线程必须始终运行,
我想将 HANDLE 和 HWND 变量传递给 _beginthreadex 函数,我不想将这些变量设置为全局变量。 这就是我试过的: int APIENTRY WinMain(HINSTANCE h
我用分析器检查了一个项目的源代码。我是 C++ 新手。 它告诉我应该使用 Use _beginthreadex/_endthreadex 函数而不是 CreateThread/ExitThread 函
我有一个丑陋的 C 代码(我是 Windows 下 C 的新手)不要评判我......我想让它成为多线程,它从我的网络服务器列表中读取并检查它们是否存在,因为牢度我需要它是多线程的。搜索了很多谷歌和
大家好,这是我的代码 #include "StdAfx.h" #include #include #include unsigned int __stdcall threadproc(void
我最近了解到 ::_beginthreadex() 总是优于 ::CreateThread(),所以我更改了所有使用 ::CreateThread 的调用()。 唯一的缺点是我不再在 Visual S
我正在尝试将项目从 VS2008 转换为 VS2013,我遇到的(众多)问题之一是: c:\program files (x86)\microsoft visual studio 12.0\vc\at
我有一堆 QWebViews 渲染到一个小部件上。有一点我开始收到错误 QThread::start: Failed to create thread (The access code is inva
所以我制作了一个函数来打印跨不同窗口分层的文本,我希望它在一个单独的线程中,这样我就可以运行一个计时器来显示文本,同时让用户保持打开状态以继续使用该程序。但是,当我编译时出现此错误: error C2
#include #include #include //#include "windowstate.cpp" //DWORD WINAPI MyThreadFunction( LPVOID l
我试图了解 CreateThread 和 _beginthreadex 之间的区别,以及为什么调用 DisableThreadLibraryCalls 只会阻止使用 安装的线程_beginthread
我对使用从 _beginthreadex() 返回的句柄不感兴趣。立即对其调用 CloseHandle() 是否安全? 我认为必须这样做以避免内存泄漏。 最佳答案 是的,您可以在决定不再需要该句柄后立
我正在尝试将一些代码移植到 64 位,但似乎 _beginthreadex 中的线程 address 标识符是 unsigned int这是 32 位的,我无法从函数传递/接收 64 位的 addre
我是一名优秀的程序员,十分优秀!