【发布时间】:2011-08-31 07:14:20
【问题描述】:
我正在开发一个应用程序,它有多个线程等待来自 DLL 和串行端口的不同输入。
我想添加一个功能,在机器进入睡眠状态之前,我必须卸载某些 DLL,并且在醒来时必须重新加载 DLL。 为此,我需要收到有关睡眠和唤醒的通知。
我找到了很多关于在 C# 中执行的文件,但我想在 C++ 中执行此操作。
我尝试使用此code Project,但无法捕获任何事件。我删除了与 Window Paint 相关的所有内容,因为我不需要它的 GUI,只保留了 main message loop (The While loop in the main)
编辑:-
我将其用作我的主循环:-
// Start the message loop.
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
坦率地说,我从 CodeProject 复制了这个,并且只做了一个修改,即从 MSDN 文章中检查了 GetMessage(..) != 0。
我错过了什么吗?
或任何其他解决方案??
我正在使用 VS2010 和 C++ 编程
提前致谢!
【问题讨论】:
-
如果有人正在关闭您的程序 (WM_CLOSE) 并关闭系统有什么区别?
-
@RedX 我还没有处理这个事件,但是当进程被杀死时,DLL 会在关闭或关闭的情况下卸载。
-
哦,忽略我的消息。睡眠不关机。
-
在这种情况下,向我们展示您的消息循环会很有帮助。
-
TranslateMessage 是做什么的,您在哪里捕获了 WM_PAINT 和其他类似事件?在您解析 WM_PAINT 的地方,您需要捕获 WM_POWERBROADCAST 并在那里检查 PBT_* 事件。也许你应该在继续之前搜索 WINAPI 和窗口消息循环的介绍。