VC中如何实现一个窗口显示几秒后自动关闭?
VC中是否能够实现一个窗口创建并显示几秒后自动关闭? 本帖最后由 Rainyboy 于 2010-10-29 16:52 编辑回复 迷路的小孩 的帖子
请问你选择的是哪个平台?
就C++而言,有MFC,也有.NET的,这两种的实现是不一样的。
或者说你已有的这个项目是按照什么类型创建的?
比如,是:
还是:
?
可以,与楼上同问。。。 本帖最后由 wqsong 于 2010-10-29 21:49 编辑
不管那种,最简单的思路就是:执行完相应的代码,然后让进程Sleep一段时间,然后返回(console)或者释放资源(MFC)。 #include <stdio.h>
#include <windows.h>
int main(void)
{
/*do what you want to do*/
printf("Sleep 2s from here!");
Sleep(2000);
return 0;
}MFC类比着写,注意释放对应窗口的所有相关资源以防止内存泄漏。 本帖最后由 Rainyboy 于 2010-10-29 22:45 编辑
回复 wqsong 的帖子
这个sleep(2000)可是休眠内核时间2000毫秒啊……如果想稍微精确一点定时还是获取时间好一点吧?
我们先不管实现,大概流程应该是:
start = end = GetCurrentTime();
while( end - start < 2000)
{
sleep(100);
end = GetCurrentTime();
}
exit();
回复 Rainyboy 的帖子
个人觉得还行,调用Sleep函数线程(进程)挂起,交给操作系统管理,然后进程自身进入等待状态(定时器中断?),不占用CPU,本身不统计进程调度时间片切换耗用时间。。。
delay函数是不提交CPU。。。
我觉得获取时间本身计在时间片轮换中,在时间片轮换、循环判断以及函数调用,这些开销也挺大的,直到判断end - start也耗用不少时间。除非提高进程优先级,就像CPU-Z一样,一开始先卡半天,估计是在计算主频吧;@P。。。
针对这问题的话提高优先级有点小题大做了。。。 Rainyboy 发表于 2010-10-29 16:49 static/image/common/back.gif
回复 迷路的小孩 的帖子
请问你选择的是哪个平台?
谢谢你的热情回复,我用的是MFC 如果窗口是自己设计的,然后用ShowWindow显示,用destroywindow关闭
这个时候还能用sleep吗?
有人说这会出现不显示窗口内容的问题,不知道这是怎么回事?怎么解决呢?
回复 迷路的小孩 的帖子
用SLEEP的话是会有这个问题,因为这时窗口对需要重绘窗体的事件进行响应了。
我再看看,好久没用MFC了,不过应该有类似于TIMER控件能产生TIMEOUT的消息,通过响应这个消息就可以实现定时了。 本帖最后由 Rainyboy 于 2010-11-1 11:25 编辑
添加这个消息响应函数
void CBBSMFCDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认
CDialogEx::OnTimer(nIDEvent);
KillTimer(1);
this->OnCancel();
}
并在初始化函数BOOL CBBSMFCDlg::OnInitDialog()中加入:
SetTimer(1,5000,NULL);
就可以了。
谢谢,可以了
页:
[1]