Timer问题
我在用Timer计算程序运行遇到下面的问题:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
a++;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
a=0;
Timer1-> Enabled=true;
Sleep(3000);
ShowMessage(a);//1
ShowMessage(a);//2
Timer1-> Enabled=false;
}
a为全局变量,在第一次ShowMessage(a)时,a总是为0,只有在show第二次的时候a值才不为零.
请高手指点!
[解决办法]
Sleep(3000)是等待3秒,这个时候Timer也在暂停状态。用这个代替Sleep:
DWORD dwTick = GetTickCount();
while(GetTickCount() - dwTick < 3000)
Application-> ProcessMessages();
[解决办法]
给我个邮箱,我给你发个完整代码
[解决办法]
你对事件的真正含义没有理解清楚,你对那个Timer的操作,是必须等按钮点击的整个事件执行完成后才执行的
根据我运行的情况来看,Timer的操作并不是整个事件执行完成后才执行,而如楼上各位所说--Sleep(3000)是等待3秒,这个时候Timer也在暂停状态
但使用
DWORD dwTick = GetTickCount();
while(GetTickCount() - dwTick < 3000)
Application-> ProcessMessages();
也不是完全正确,在我机器上第一次点击按钮显示的是3 ,以后都是2 我想可能是TIMER的优先级低,丢失了消息的原因吧。
因此如果要精确记时不要用TIMER,看看TR老大写的BCB深度历险的多媒体定时器吧
[解决办法]
根据我运行的情况来看,Timer的操作并不是整个事件执行完成后才执行,而如楼上各位所说--Sleep(3000)是等待3秒,这个时候Timer也在暂停状态:因为不是多线程,是单线程,以Sleep也就是整个系统都Sleep了