为何每次用CreateWindowEx创建的窗口使用完关闭后句柄和内存占用都不会释放啊?
比如主窗口上面有个按钮,点击这个按钮后会通过CreateWindowEx创建出另一个窗口,而关闭这个窗口时我也在它的WM_DESTROY消息分支里执行了CloseHand...
比如主窗口上面有个按钮,点击这个按钮后会通过CreateWindowEx创建出另一个窗口,而关闭这个窗口时我也在它的WM_DESTROY消息分支里执行了CloseHandle(m_hWnd),最后还执行了UnregisterClass注销了这个窗口类。可为什么每次点击按钮创建出来一个窗口后,在Windows任务管理器里都会看到我这个应用程序的句柄和内存占用在增加,即便是把窗口关闭了,句柄和内存占用也不会自动释放啊。请问这是怎么回事啊?
回1楼的 远风的梦想家,我使用DestroyWindow了,可还是不行
2楼的 ZHRX 朋友,你说的是VB内部设计时添加的窗体Form,这个方法我当然知道。我说的是利用API函数CreateWindowEx运行时动态创建的窗口啊……
非常感谢 远风的梦想家 朋友!你的分析很有道理,实在不好意思,我又测试了一下,终于找到原因了,原来是怨我使用DestroyWindow的时候不当所致。应该是在窗口关闭之后摧毁类实例的时候执行DestroyWindow,这样该窗口的句柄就立刻被释放了。 展开
回1楼的 远风的梦想家,我使用DestroyWindow了,可还是不行
2楼的 ZHRX 朋友,你说的是VB内部设计时添加的窗体Form,这个方法我当然知道。我说的是利用API函数CreateWindowEx运行时动态创建的窗口啊……
非常感谢 远风的梦想家 朋友!你的分析很有道理,实在不好意思,我又测试了一下,终于找到原因了,原来是怨我使用DestroyWindow的时候不当所致。应该是在窗口关闭之后摧毁类实例的时候执行DestroyWindow,这样该窗口的句柄就立刻被释放了。 展开
2个回答
展开全部
The CloseHandle function closes handles to the following objects:
Communications device
Console input
Console screen buffer
Event
File
File mapping
Job
Mailslot
Mutex
Named pipe
Process
Semaphore
Socket
Thread
Token
closehandle不是用来关闭窗口对象的,你用createwindow创建的句柄,只能到任务线程销毁的时候才会被释放,你关闭的时候不释放,因为创建的时候你是要指定instance的,创建的对象会绑定到这个实例上,直到任务结束才销毁。当然你也不用担心用户反复打开新窗口的问题,如果如果一直都是同样的窗口,不会导致新句柄增加
Communications device
Console input
Console screen buffer
Event
File
File mapping
Job
Mailslot
Mutex
Named pipe
Process
Semaphore
Socket
Thread
Token
closehandle不是用来关闭窗口对象的,你用createwindow创建的句柄,只能到任务线程销毁的时候才会被释放,你关闭的时候不释放,因为创建的时候你是要指定instance的,创建的对象会绑定到这个实例上,直到任务结束才销毁。当然你也不用担心用户反复打开新窗口的问题,如果如果一直都是同样的窗口,不会导致新句柄增加
启帆信息
2024-11-19 广告
2024-11-19 广告
启帆信息是英伟达中国区代理商,原厂授权代理,提供全面的软件技术解决方案以及NVIDIA以太网产品、交换机等产品,欢迎前来咨询!...
点击进入详情页
本回答由启帆信息提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询