各位高手大家好,小弟请教以下一个问题:
我用udp发送多媒体数据包,因为我所发送的包要做成视频,所以在线程中我每发送完一个包就要等待一段时间(ms级),我用的是sleep()来等待时间,但是我发现好像不是很精确,
比如所我计算出发完一个包后需要等待31ms,我用sleep(31)来等待,但是我不知道这个函数是否确切的等待了31ms,因为我在sleep前后用getTickCount()函数分别得出了一个时间值,这两个值相减是40ms
好像他多睡了好几毫秒,需要等待47毫秒的时候,减出来是50,一般都是整数我现在不知道是sleep()函数睡眠时间不够精确,还是我用getTickCount()函数计算出来的时间差不精确,不知道我上面的所清楚没有。呵呵。请问各位高手是否还有什么好的方法能“睡眠”精确的时间段,或是有什么建议。
先谢谢大家~!
预祝各位圣诞快乐^_^
我用udp发送多媒体数据包,因为我所发送的包要做成视频,所以在线程中我每发送完一个包就要等待一段时间(ms级),我用的是sleep()来等待时间,但是我发现好像不是很精确,
比如所我计算出发完一个包后需要等待31ms,我用sleep(31)来等待,但是我不知道这个函数是否确切的等待了31ms,因为我在sleep前后用getTickCount()函数分别得出了一个时间值,这两个值相减是40ms
好像他多睡了好几毫秒,需要等待47毫秒的时候,减出来是50,一般都是整数我现在不知道是sleep()函数睡眠时间不够精确,还是我用getTickCount()函数计算出来的时间差不精确,不知道我上面的所清楚没有。呵呵。请问各位高手是否还有什么好的方法能“睡眠”精确的时间段,或是有什么建议。
先谢谢大家~!
预祝各位圣诞快乐^_^
可以使用CPU的什么频率的函数计算精确的时间
{
LARGE_INTEGER CurrTicks, TicksCount; QueryPerformanceFrequency(&TicksCount);
QueryPerformanceCounter(&CurrTicks); TicksCount.QuadPart = TicksCount.QuadPart * Us / 1000000i64;
TicksCount.QuadPart += CurrTicks.QuadPart; while(CurrTicks.QuadPart<TicksCount.QuadPart)
QueryPerformanceCounter(&CurrTicks);
}
可以精确到微妙
更高精度可以使用ZwDelayExecution()
1.在需定时的开始处
LARGE_INTEGER CurrTicks, TicksCount; QueryPerformanceFrequency(&TicksCount);
QueryPerformanceCounter(&CurrTicks); TicksCount.QuadPart = TicksCount.QuadPart * Us / 1000000i64;
TicksCount.QuadPart += CurrTicks.QuadPart; while(!CurrTicks.QuadPart<TicksCount.QuadPart)
NullOperation(); //这是一个你自己自定义函数
NullOperation(){
__asm{
nop
nop
nop
}
}这样可以吗,如果成功请给我发个短信。