描述:
不是很清楚是否应该用COM来做
是这样:
比如我有一些应用程序,它们打开了一些数据库的连接。
在关机的时候,windows似乎只是简单的kill这些进程,而一些资源(比如数据库连接)就没有被释放掉。
我想知道有没有这样负责清理工作的例子?谢谢!
解决方案1:
试试这个 WM_QUERYENDSESSION 消息~~~
解决方案2: 系统关闭时,会发送WM_QUERYENDSESSION消息给每个进程
只要拦下WM_QUERYENDSESSION消息.然后进行处理.之后在发送WM_QUERYENDSESSION就可以了
不需要这么复杂的,只要在PreTranslateMessage截获WM_QUERYENDSESSION
然后做响应就行了
其实windows都要关闭了,资源释放不释放的还有什么意义呢?^_^
系统关闭时,会发送WM_QUERYENDSESSION消息给每个进程
//响应WM_QUERYENDSESSION消息
PreTranslateMessage里截获消息,然后处理
case WM_QUERYENDSESSION:
{
int ret;
ret = MessageBox(NULL, "是否关闭?","WM_QUERYENDSESSION", MB_YESNO);
return ret == IDYES;
break;
}
重启时,系统会向Top Level的窗口发送WM_QUERYENDSESSION消息。
发送消息时,系统是有一个优先级的,先向哪些程序发送,后向哪些程序发送。
几乎没有哪个应用程序关心这个优先级,所以你只需要将你的这个优先级设置高一些,以便于系统先向你的窗口哪送消息。就可以达到你的要求了,也不用去截获发给其他程序的消息了。
这个优先级可以由SetProcessShutdownParameters来设置。
BOOL SetProcessShutdownParameters(
DWORD dwLevel, // shutdown priority
DWORD dwFlags // shutdown options
);
dwLevel可以取的值为 0x100 ~ 0x3ff,值越大,优先级越高。
dwFlags设置成0或SHUTDOWN_NORETRY
这个API 9x/me不支持.