请帮我看看这段代码,关于用时间控件触发事件的,调用的时候为什么总是会这样?紧急等待中
在我的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 ;
}