dll中一个while循环的退出条件问题

shyway 2006-04-03 07:50:40
写了一个dll,用rundll32.exe来运行,在dll中有一个while 循环,用于不停地检查网络的情况,一旦发现网线被拔出,就锁定键盘。
这是个死循环:
while(true)
{
sleep(3000);
检查网络情况的代码.....
}
现在问题是,我不知道如何退出这个循环,这个dll我是希望能常驻内存,一直对网络进行检测的,所以要循环检测。在关机的时候老是出现“正在结束程序”对话框,意思是“正在结束rundll32.exe,请稍候”。但是,等到最后,windows还是没办法结束这个rundll32.exe,问我是“立即结束”还是“取消”。我知道这肯定是while死循环的原因,我如何能在用户关机的时候退出这个while循环呢?
谢谢!!
...全文
321 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jimmy_Xia 2006-04-04
  • 打赏
  • 举报
回复
具体代码我手头没有,你可以找一下。
Jimmy_Xia 2006-04-04
  • 打赏
  • 举报
回复
1、在注册表里指定位置注册一个dll,系统在关机时,会调用你的DLL里的函数。HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\APPINIT_DLLS
中加dll文件名
2、用钩子函数监视系统关闭和重启的消息
Windows在关机时会向正在运行的应用程序发送两个消息,
一个为WM_QUERYENDSESSION,应用程序返回TRUE同意关闭系统,同时,你可在此处进行操作。
另一个为WM_ENDSESSION,如果Windwos从所有程序的WM_QUERYENDSESSION处理结果都得到TRUE,它将以TRUE为参数再次广播WM_ENDSESSION消息。
shyway 2006-04-04
  • 打赏
  • 举报
回复
to lixiaosan;

在if(shutdown)
{break;
}
中,我怎么才能知道系统要关机了呢?
chenyulin 2006-04-04
  • 打赏
  • 举报
回复
用ontimer不行吗??
lixiaosan 2006-04-04
  • 打赏
  • 举报
回复
while(true)
{
sleep(3000);
检查网络情况的代码.....
if (shutdown)
break;
}
flyelf 2006-04-04
  • 打赏
  • 举报
回复
在dll中检测系统关机的消息
shyway 2006-04-04
  • 打赏
  • 举报
回复
谢谢!!
用yongdu的方法解决了。

LongLongAgoImBoy的第一个方法我也想试试。
谢谢大家!!!
xwmpq 2006-04-04
  • 打赏
  • 举报
回复
PeekMessage退出消息后break退出循环
yongdu 2006-04-04
  • 打赏
  • 举报
回复
你应该监测 WM_QUERYENDSESSION 与 WM_ENDSESSION消息:
MSG msg;
while(true )
{
if(PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE))
{

}
}
shyway 2006-04-03
  • 打赏
  • 举报
回复
DentistryDoctor 您是想我问什么呢?
DentistryDoctor 2006-04-03
  • 打赏
  • 举报
回复
出口条件真的触发了?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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