首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

Timer有关问题

2012-02-10 
Timer问题我在用Timer计算程序运行遇到下面的问题:void__fastcallTForm1::Timer1Timer(TObject*Sender){a+

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了

热点排行