VC++6.0 关于在一段时间内判断一个参数是否改变

来源:百度知道 编辑:UC知道 时间:2024/05/12 16:51:28
例如有一个int temp=0;
在两秒内如果有用户改变其值,则temp最终的值为该改变的值。
两秒内如果没有改变,则temp最终的值为0。
希望有代码吧~
详细点我再给分了~

2楼的代码 那个DoEvent()不是很理解。。。小弟菜- -~
例如为什么
cout<<"aa"<<endl;
DWORD dwCurTime = GetTickCount();
int nSave = temp;
while(TRUE)
{
DoEvent();
if((GetTickCount()-dwCurTime) > 2000)
{
if(nSave == temp) temp = 0;
break;
}
}
cout<<"aa"<<endl;
这样的代码不是先输出aa,然后过2秒再输出一个aa
而是先等两秒,然后输出两个aa?

可以在一个循环内处理。
可以使用GetTickCount计算时间间隔,代码大概如下:

DWORD dwCurTime = GetTickCount();
int nSave = temp;
while(TRUE)
{
DoEvent();
if((GetTickCount()-dwCurTime) > 2000)
{
if(nSave == temp) temp = 0;
break;
}
}

其中 DoEvent();在VB中有,用来中断当前代码执行,处理未处理的所有消息队列后返回,并继续向下执行。目的就是腾出CPU时间,让用户做一些其他操作。

由于在 VC 中没有提供,这个函数只能自己动手实现,代码如下:

void DoEvent()
{
MSG msg;
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
//if(!IsDialogMessage(&msg))
//{
TranslateMessage(&msg);
DispatchMessage(&msg);
//}
}
}

使用定时器吧,两秒过后就禁止修改这个值就可以了。

用timer你可以设置给BOOL bIsChange;
用户要改变的时候先判断
程序中用SetTimer(1,2000,NULL);
2秒后触发OnTimer消息事件
OnTimer(UINT nIDEvent)
{
if(nIDEvent = 1)
{
bIsChange = FALSE;
}
}