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

请帮小弟我看看这段代码,关于用时间控件触发事件的,调用的时候为什么总是会这样?紧急等待中

2012-02-26 
请帮我看看这段代码,关于用时间控件触发事件的,调用的时候为什么总是会这样?紧急等待中在我的FormShow里有

请帮我看看这段代码,关于用时间控件触发事件的,调用的时候为什么总是会这样?紧急等待中
在我的FormShow里有这样一段:
void   TForm1::FormShow()
{
      if(Timer1-> OnTimer)
            Timer1-> OnTimer(Timer1);     //1
      MyFun1();                                         //2
      MyFun2();                                         //3
      ...
}
void   TForm1::Timer1Time()               //4
{
      .....//延时10S                            
      ....   //当10S后,Timer1-> Enabled   =   false,自动关闭
}
在Form上放了一个Timer1控件,Enabled=false,其他默认.程序开始执行的时候,先执行1,然后到4里去执行,但是Timer1Time()执行一次之后,跳出来又去执行2和3了,我要求,让它必须先执行1,而且到了10S之后才去执行2和3,请问如何实现?



[解决办法]
Timer中的事件是不影响其他语句执行的,不需要用Timer了,太浪费资源,直接用

Sleep(10000);

如果非要用,你必须把函数放到Timer事件中并把Timer1的Interval设为10000并Disabled
void TForm1::FormShow()
{
Timer1-> Enabled = true;
}
void TForm1::Timer1Time() //4
{
MyFun1(); //2
MyFun2(); //3
Timer1-> Enabled = false,自动关闭
}

[解决办法]
如果用一个定时器的话
就设置一个标志位
bool runFlag ;
void TForm1::FormShow()
{
MyFun1();
runFlag = true;
Timer1-> Enabled = true;
}
void TForm1::Timer1Time()
{
if(runFlag)
{
MyFun2();
MyFun3();
}
else
MyFun1();

runFlag = !runFlag ;
}

热点排行