void CSplitScreenServerDlg::cmDelay(int ms)
{
QueryPerformanceCounter(&m_liDelayBegin);
do
{
QueryPerformanceCounter(&m_liDelayEnd);
m_dDelayTime = (m_liDelayEnd.QuadPart - m_liDelayBegin.QuadPart)/m_dClockFreq;
} while (m_dDelayTime<0.001*ms);
}
下面是控制定时代码:
QueryPerformanceCounter(&m_liWaitEnd);
while (TRUE)
{
m_liWaitBegin = m_liWaitEnd;
if (1<m_nShowFrame)
{
QueryPerformanceCounter(&m_liWaitEnd);
m_dWaitTime = (m_liWaitEnd.QuadPart - m_liWaitBegin.QuadPart)/m_dClockFreq;
if(nTimeDiff>(int)(m_dWaitTime*1000))
cmDelay(nTimeDiff - (int)(1000*m_dWaitTime));
}
//////////////////////////////////
此部分代码将命令发送到客户端控制播放
//////////////////////////////////
}
m_nReadyClient = 0;
ResetEvent(m_hClientState);
///////////////////////////////////////
客户端播放收到命令播放完一帧之后通知服务器端
m_hClientState设置为singaled
/////////////////////////////////////////
WaitForSingleObject(m_hClientState, nTimeDiff);
--------------------------------------pia,分割--------------------------------
现在的情况是这样的,客户端若在静态链接中使用MFC,播放就比设置的帧频略慢一点(先前是刚好是设置的帧频,改了一些无关紧要的代码之后,又慢了)。在共享中使用MFC时,播放速率就毫不考虑控制代码,直接按快的来。VS2010环境,优化全部去掉了。已经折腾几个星期了,百思不得其解啊,懂的大侠帮帮我啊~~
12 个解决方案
#1
需要的精度太高?
#2
帮顶一下!
#3
帮顶下 这个用过 我只是取间隔 然后每四十毫秒发送一帧 假如定时器不准超过40毫秒在补发一帧
#4
帮顶!
#5
-----------------------------------------
我差不多也是这样啊,每40毫秒发一帧,可是它就是毫不理会我的延时函数。在延时函数前后测时间,也没错啊。
快崩溃了,只想用头把屏幕撞碎。
#6
windows的这种时间精度最低是55ms左右。
#7
WINDOWS下面的延时不准。
#8
---------------------------------------
我用的是自定义的延时,用QueryPerformanceCounter实现的,已测,精度在微妙级的,拜托两位看看代码好吗?
#9
是不是多线程的控制问题
#10
系统有线程调试切换,可能很难满足这么准确的要求
#11
线程调试切换?
现在的情况是,我把客户端跟服务器端都用“在共享中使用MFC”,程序就会以最快速度显示每一帧,完全不理会时间控制函数啊。还是撞死在屏幕上比较容易些。
#12
你说的我用过,我才说不准的。
#1
需要的精度太高?
#2
帮顶一下!
#3
帮顶下 这个用过 我只是取间隔 然后每四十毫秒发送一帧 假如定时器不准超过40毫秒在补发一帧
#4
帮顶!
#5
-----------------------------------------
我差不多也是这样啊,每40毫秒发一帧,可是它就是毫不理会我的延时函数。在延时函数前后测时间,也没错啊。
快崩溃了,只想用头把屏幕撞碎。
#6
windows的这种时间精度最低是55ms左右。
#7
WINDOWS下面的延时不准。
#8
---------------------------------------
我用的是自定义的延时,用QueryPerformanceCounter实现的,已测,精度在微妙级的,拜托两位看看代码好吗?
#9
是不是多线程的控制问题
#10
系统有线程调试切换,可能很难满足这么准确的要求
#11
线程调试切换?
现在的情况是,我把客户端跟服务器端都用“在共享中使用MFC”,程序就会以最快速度显示每一帧,完全不理会时间控制函数啊。还是撞死在屏幕上比较容易些。
#12
你说的我用过,我才说不准的。