怎么在程序中实现高效的等待?
我有这样一段代码
(A) .....
int iTm=GetTickCount();
while(GetTickCount()<iTm+5000) {};
(B) .....
当执行完(A)后,要等待5秒左右再执行(B)。结果我这段程序等待5秒是实现了,但这段等待程序太占系统资源搞的等待其间系统中的其它程序动都动不了。
望高手指教,在C++Builder中怎样才能实现高效的等待。
问题点数:100、回复次数:9Top
1 楼sfemil(心洋)回复于 2003-11-03 15:56:57 得分 10
Sleep(5000);Top
2 楼GodBirdFlying(飞翔天堂鸟)回复于 2003-11-03 16:07:50 得分 5
你的高效等待是什么意思? 直接Sleep();不就成了吗?
Top
3 楼jiangchun_xn(GrayMemory)(再回头·灯火依旧·人不见·潸然泪下)回复于 2003-11-03 16:33:07 得分 5
sleep是可以。
最好的等待是事件对象,不占用cpuTop
4 楼jiangchun_xn(GrayMemory)(再回头·灯火依旧·人不见·潸然泪下)回复于 2003-11-03 16:38:39 得分 0
use timer control;
Top
5 楼lbllbl(失败者)回复于 2003-11-03 16:42:54 得分 0
Sleep好象还有点问题。
VB不是有个DoEvent,我就想要那样的功能,这样在等待其间,我还可以窗体进行一些其它操作。Top
6 楼sprewellkobe(我为软件狂!)回复于 2003-11-03 16:45:21 得分 10
用timer就可以了
如果不嫌麻烦,可以使TEvent,其实也不麻烦
Event1->ResetEvent(); // clear the event before launching the threads
for(int i = 0; i < Counter; i++)
new TaskThread(false); // create and launch task threads
if (Event1->WaitFor(20000) != wrSignaled)
throw Exception;
Top
7 楼lbllbl(失败者)回复于 2003-11-03 16:58:58 得分 0
sprewellkobe能不能把用Event的完整代码写出来。
(A)... ...
等5000秒?????
(B)... ...
Top
8 楼gloom(苍狗白云)回复于 2003-11-03 17:15:18 得分 35
在While中加入 Application->ProcessMessages();Top
9 楼chifengwatch(chifengwatch)回复于 2003-11-03 17:15:37 得分 35
void Delay(DWORD DT)
{
if ( DT == 0 ) { return ; }
long tt ;
tt = GetTickCount() ;
while ( GetTickCount() - tt < DT )
{
Application->ProcessMessages();
if ( (GetTickCount() - tt ) <= 0 )
{
tt = GetTickCount();
}
}
}
加上Application->ProcessMessages();Top




