CreateWindowEx failed (当前程序已使用了 Window 管理器对象的系统允许的所有句柄。)
我在QT图形场景视图中通过QGraphicsProxyWidget添加代理Widget(实现添加基本的QT Widget,如按钮、复选框、日期时间控件等),当数量超过3500左右的时候,QT应用程序直接崩溃了~
提示: CreateWindowEx failed (当前程序已使用了 Window 管理器对象的系统允许的所有句柄。)

这里我是在Windows系统上进行的实验,可见,创建WIdget的时候底层还是调用的Windows API CreateWindowEx
在Linux(Ubuntu)上进行测试,没有发现限制问题。
QT创建Widget的时候实际上调用了Windows API CreateWindowEx,当创建的数量很多时就会造成窗口句柄不够用。
初步分析:Windows的窗口句柄是有限制的,当消耗殆尽就会出现上述的错误提示,从而导致程序崩溃退出!
在Windows平台上使用GetLastError 获取错误码 1158
[1158]-当前程序已使用了 Window 管理器对象的系统允许的所有句柄。
1158 : ERROR_NO_MORE_USER_HANDLES
The current process has used all of its system allowance of handles for Window Manager objects.
意思是说你的程序已经没有可用句柄能再分配使用了,系统分配给一个进程的可用句柄数是有限的,我猜测你的程序中打开了大量句柄,但是用过之后却没有记得释放,好好检查一下代码吧,句柄不用了就要CloseHandle()释放掉,不然系统的句柄资源会被你耗光的.
比如说,hProcess := OpenProcess(...);获取一个进程句柄,当你对这个进程操作完成过后,就要CloseHandle(hProcess);
如果程序中创建很多个窗口,创建过程中会导致进程的“User Objects”数量不断增大,会超过每个进程允许的上限值(每个进程GDI句柄上限10000,用户句柄上限10000),you should avoid getting anywhere near it as there is also a session-wide limit that is too close for comfort to the per process limit.

关于Windows句柄数限制
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows

设置:
GDIProcessHandleQuota项设置GDI句柄数量,默认值为2710(16进制)/10000(10进制),该值的允许范围为 256 ~ 16384 ,将其调整为大于默认的10000的值。如果您的系统配置了2G或更多内容,不妨将其设置为允许的最大值 16384(10进制);
USERProcessHandleQuota项设置用户句柄数量,默认值同样为2710(16进制)/10000(10进制),该值的允许范围为 200 ~ 18000 ,将其调整为更多的数值。同样地,对于具有2GB或更多物理内存的系统,不妨将用户句柄数直接设置为上限 18000(10进制);
感觉设置了没啥作用,多出了那一点句柄数起不了什么作用。
亲自试了试,确实没啥大作用!
CreateWindowEx failed (当前程序已使用了 Window 管理器对象的系统允许的所有句柄。)的更多相关文章
- QtQuick桌面应用程序开发指南 4)动态管理Note对象_B 5)加强外观 6)许多其他的改进
4.2.2 Stateless(不管状态)JavaScript库 为了让开发轻松点, 使用一个JavaScript接口来和数据库交互是个好主意, 它在QML中提供了方便的方法; 在QtCreator中 ...
- 编写Java程序,使用Swing布局管理器和常用控件,实现仿QQ登录界面
返回本章节 返回作业目录 需求说明: 使用Swing布局管理器和常用控件,实现仿QQ登录界面 实现思路: 创建登录界面的类QQLogin,该类继承父类JFrame,在该类中创建无参数的构造方法,在构造 ...
- 编写Java程序,使用Swing布局管理器与常用控件,实现用户登录界面
返回本章节 返回作业目录 需求说明: 使用Swing布局管理器与常用控件,实现用户登录界面 实现思路: 创建用户登录界面的类LoginFrame,在该类中创建无参数的构造方法,在构造方法中,设置窗体大 ...
- Android应用程序窗口(Activity)的窗口对象(Window) 的创建过程分析
每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一个具体的应用程序窗口. 每一个Activity组件都有一个关联的ContextImp ...
- Mac软件安装提示程序已损坏解决方案
---恢复内容开始--- 最近下载好的Mac软件安装时,系统跳出该程序已损坏: 嗯……估计是因为下载了破解版,被系统屏蔽,重设一下安全设置就好: 很兴奋的打开系统偏好设置->安全性与隐私: 然而 ...
- OpenCV 无法启动此程序,因为计算机中丢失opencv_core249.dll。请尝试重新安装改程序已解决此问题
换了64位的系统,配置好之后运行之前的程序,竟然给我抛出这个错误.应该是我的opencv没有安装对吧.系统报错 无法启动此程序,因为计算机中丢失opencv_core249.dll.请尝试重新安装改程 ...
- 解决 无法启动此程序,因为计算机中丢失opencv_world341.dll。请尝试重新安装改程序已解决此问题
在运行OpenCV程序时报错:“无法启动此程序,因为计算机中丢失opencv_world341.dll.请尝试重新安装改程序已解决此问题”. 解决方法 我的bin目录是 D:\opencv\build ...
- 关闭”xx程序已停止工作”提示窗口
运行注册表编辑器,依次定位到HKEY_CURRENT_USER\Software\Microsoft\Windows\WindowsError Reporting,在右侧窗口中找到并双击打开Donts ...
- VMware 打开虚拟机出现另一个程序已锁定文件的一部分,进程无法访问
打开虚拟机出现 另一个程序已锁定文件的一部分,进程无法访问 打不开磁盘"D:\Virtual Machines\CentOS 7 64 位\CentOS 7 64 位.vmdk"或 ...
随机推荐
- 移动游戏ui设计(二)--游戏世界的基本法则
游戏世界的基本法则游戏体验的层次感很重要,制作一款趣味性强,宗旨明确的游戏并不简单. l 风格统一性:要先明白游戏的game genres,因为游戏类型与风格密切联系.常见游戏类型有:动作类.冒险类 ...
- Visual Studio VS使用freopen调试控制台闪退
解决方法 freopen("CON", "r", stdin); system("pause>nul"); 暂停函数之前,使用f ...
- JAVA自学笔记06
JAVA自学笔记06 1.二维数组 1)格式: ①数据类型[][]数组名 = new 数据类型[m][n]; 或 数据类型[]数组名[]=new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...
- KMSpico 无后门下载
MDL论坛 Windows Loader https://forums.mydigitallife.net/threads/windows-loader-download.58464/ KMS_V ...
- Python3 与 C# 并发编程之~ Net篇
NetCore并发编程 示例代码:https://github.com/lotapp/BaseCode/tree/master/netcore/4_Concurrency 先简单说下概念(其实之前也有 ...
- Java利用ShutDownHook关闭系统资源
Java关闭钩子 在Java程序中能够通过加入关闭钩子,实如今程序退出时关闭资源的功能. 使用Runtime.addShutdownHook(Thread hook)向JVM加入关闭钩子 public ...
- IIS Express ArgumentOutOfRangeException
重装了VS,调试网站,IIS Express 打开时遇到如下错误. “/”应用程序中的服务器错误. 指定的参数已超出有效值的范围.参数名: site 说明: 执行当前 Web 请求期间,出现未经处理的 ...
- java利用Tesseract 识别身份证号码
安装Tesseract http://blog.csdn.net/hiredme/article/details/50894814 http://blog.csdn.net/yoara/article ...
- ChartControl控件0和null的效果
DevExpress的ChartControl虽然还不能完全代替Office图表(例如它暂时不支持添加数据表),但它算同类产品中相当优秀的了,下面是对0值和空值的处理. DataTable zeroD ...
- 【MAC】Mac下部分常用的小工具
Homebrew: 官方介绍:The missing package manager for OS X(OS X 不可或缺的套件管理器) /usr/bin/ruby -e "$(curl - ...