哪位能详解一下“1158 当前进程已使用了 Window 管理器对象的系统允许的所有句柄。”

julong88 2008-12-14 04:15:16
rt
...全文
2252 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinhaize 2009-10-20
  • 打赏
  • 举报
回复
我的程序也是出现这个提示,但句柄数一直没怎么变,但user对象增加到9999个。不知道是怎么回事。
JPEXE 2008-12-16
  • 打赏
  • 举报
回复
楼主请用类似的方法在任务管理器中查看"User 对象"和"GDI 对象"的数值是否过大.
tjg5202 2008-12-15
  • 打赏
  • 举报
回复
不太清楚楼主的这个问题了。。。。。。
julong88 2008-12-15
  • 打赏
  • 举报
回复
程序运行了一夜,句柄数226,线程数9。应该是没有问题的,我所提出的那个问题可能是因为界面操作无效后引起的


现在的问题是,运行一夜后,pagecontrol的第二页以后都会显示是白色的,看不到控件,还有其他的一些错误,主菜单弹出不了等等
mjtalhx 2008-12-15
  • 打赏
  • 举报
回复
不懂
JPEXE 2008-12-14
  • 打赏
  • 举报
回复
你可以运行你的程序,然后在任务管理器里查看它的进程,在任务管理器菜单里"查看->选择列->句柄计数"打上勾,看句柄计数的值是否会增加到很大,如果是的话就证明程序里有大量句柄资源没有及时释放掉.
JPEXE 2008-12-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 julong88 的回复:]
没有打开进程的操作啊
[/Quote]
我不是说一定是操作进程,我又没看过你的代码,用OpenProcess只是举个例子,其它很多操作都会使用到句柄的,系统里句柄可是无处不在的.
julong88 2008-12-14
  • 打赏
  • 举报
回复
没有打开进程的操作啊
julong88 2008-12-14
  • 打赏
  • 举报
回复
我在定时器里面首先关掉定时器然后创建线程,然后设置MyThread.OnTerminate := ThreadDone;

constructor:
初始化一些非可视组件。。。
FreeOnTerminate := True;
inherited Create(false);


destructor:
销毁创建的组件


ThreadDone中打开定时器

zhao_yong 2008-12-14
  • 打赏
  • 举报
回复
同意楼上.
JPEXE 2008-12-14
  • 打赏
  • 举报
回复
System Error Code
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);
qap22 2008-12-14
  • 打赏
  • 举报
回复
??

830

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧