钩子

关于钩子和多线程中不能使用UpadateData的问题的解决

家住魔仙堡 提交于 2019-12-06 21:58:25
今天项目遇到一个关于dll中钩子里调用含有updatedata()的问题,总是在updatedata()出报assert的错误。经过在网上查找资料解决了这个问题,可能很多人都已经知道解决方法,我在这里写出来一方面是想和大家分享,另一方面也是便于自己记忆和翻阅。 解决方案: UpdateData(FALSE)语句用SendMessage(WM_UPDATEDATA, FALSE)替代即可. abc.h文件中: #define WM_UPDATEDATA WM_USER + 5 LRESULT OnUpdateData(WPARAM wParam, LPARAM lParam); abc.cpp文件中: //函数映射 : ON_MESSAGE(WM_UPDATEDATA, OnUpdateData) //定义新函数: LRESULT CProtectPage::OnUpdateData(WPARAM wParam, LPARAM lParam) { UpdateData(wParam); return 0; } //传消息给窗口: SendMessage(WM_UPDATEDATA, FALSE) 原文:http://blog.sina.com.cn/s/blog_4c73004f01000a72.html 来源: oschina 链接: https://my.oschina.net

JVM的关闭钩子

本小妞迷上赌 提交于 2019-11-30 19:09:03
什么是关闭钩子(Shutdown Hook)?先看看JavaDoc的说明: 关闭钩子是指通过Runtime.addShutdownHook注册的但尚未开始的线程 。这些钩子可以用于实现服务或者应用程序的清理工作,例如删除临时文件,或者清除无法由操作系统自动清除的资源。 JVM既可以正常关闭,也可以强行关闭。正常关闭的触发方式有多种,包括:当最后一个“正常(非守护)”线程结束时,或者当调用了System.exit时,或者通过其他特定于平台的方法关闭时(例如发送了SIGINT信号或者键入Ctrl-C)。 在正常关闭中, JVM首先调用所有已注册的关闭钩子 。 JVM并不能保证关闭钩子的调用顺序 。在关闭应用程序线程时,如果有(守护或者非守护)线程仍然在执行,那么这些线程接下来将与关闭进程 并发 执行。当所有的关闭钩子都执行结束时,如果runFinalizersOnExit为true【通过Runtime.runFinalizersOnExit(true)设置】,那么JVM将运行这些Finalizer(对象重写的finalize方法),然后再停止。 JVM不会停止或中断任何在关闭时仍然运行的应用程序线程 。当JVM最终结束时,这些线程将被强行结束。如果关闭钩子或者Finalizer没有执行完成,那么正常关闭进程“挂起”并且JVM必须被强行关闭。 当JVM被强行关闭时,只是关闭JVM