VC循环中每步的时间怎么控制 在vc线程的循环中,想要控制每步的循环时间,比如走一步1秒后再执行下一步循环,除了用sleep这个函数外还有什么别的方法没,先谢谢各位了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不用for,改为OnTimer.你想要每隔几秒执行一次就用SetTimer设定就可,然后在OnTimer执行for循环的任务 可以根据两次调用GetTickCount的返回值来确定经过了多少时间。 使用高精度多媒体时钟 QueryPerformanceFrequency QueryPerformanceCounter BOOL ret; LARGE_INTEGER Frequency; ret = QueryPerformanceFrequency(&Frequency); ASSERT(ret); LARGE_INTEGER Delay_Count; Delay_Count.QuadPart = Frequency.QuadPart / 10; //0.1秒 for(xxxxxxxx) { LARGE_INTEGER End_Count; ret = QueryPerformanceCounter(&End_Count); ASSERT(ret); End_Count.QuadPart += Delay_Count.QuadPart; //do something while(1) //等待延时 { LARGE_INTEGER Cur_Count; ret = QueryPerformanceCounter(&Cur_Count); ASSERT(ret); if(Cur_Count.QuadPart > End_Count.QuadPart) break; Sleep(0); } } Sleep、OnTimer 都只能大概性的控制,精度很差,但使用简单,线程不需要处理时间相关的附加任务,CPU不浪费;GetTickCount 返回开机到调用时的毫秒计数,可用于毫秒级的控制,但线程必须自己控制流程,如在一个循环中不停检查的话 CPU 会 100%,不可接受;要精确的话应该多媒体时间控制,据说可以使用多媒体时间控制方法,我自己没用过,不过个人对 zgl7903 的代码有点怀疑 -- 其 CPU 占用应该也会很高,在一个循环中放置一个 Sleep(0) 除了能让进程中其它中其它线程有运行机会外没什么别的用处。 我也只知道OnTimer和SetTimer timesetevent效果不错,之前用过。做的是MS级别的定时任务 由于Windows根本就不是实时操作系统,所以在Windows下更本没有办法精确实现你的目的,Sleep可能根本就不起作用,这是有线程优先级决定的,而OnTimer肯定也不行,因为它是消息模式,不是实时的,GetTickCount也不行. 重复定义的问题 有两个小问题请各位高手指教,急急!! 在.cpp文件中添加函数 在标准工具栏中添加了新项后(并且在菜单中没有相同的项),如何用向导添加消息处理函数? 对于一个字符串从右边向左边查询的函数是什么? 郁闷啊郁闷啊,怎么也取不到OnDraw里的DC 请问:怎么实现用VC编程能自动生成一个WORD文档? 請問小榕的流光那種界面是怎麼做出來的? 关于在VC中如何将已有的DLL扩展给别的程序使用的问题! 请教怎么改写应用程序的标题栏。^0^(可以再加) 来一贴 GDI+ : Image 对象的删除
QueryPerformanceFrequency QueryPerformanceCounter BOOL ret;
LARGE_INTEGER Frequency;
ret = QueryPerformanceFrequency(&Frequency);
ASSERT(ret);
LARGE_INTEGER Delay_Count;
Delay_Count.QuadPart = Frequency.QuadPart / 10; //0.1秒 for(xxxxxxxx)
{
LARGE_INTEGER End_Count;
ret = QueryPerformanceCounter(&End_Count);
ASSERT(ret);
End_Count.QuadPart += Delay_Count.QuadPart; //do something
while(1) //等待延时
{
LARGE_INTEGER Cur_Count;
ret = QueryPerformanceCounter(&Cur_Count);
ASSERT(ret);
if(Cur_Count.QuadPart > End_Count.QuadPart)
break;
Sleep(0);
}
}
timesetevent效果不错,之前用过。做的是MS级别的定时任务