你这个方法,基本搞定了,可是为啥XP下定时效果子不一样的呢,XP下面它的延时为31-32MS的延时了呢?
悄悄 ...
我是看了上面发现你说发字幕,还以为你是发字幕的。我的意思是你直接开个线程去轮询IMediaPosition接口里就有CurrentPosition,类似于这段代码,以视频的时间轴作为基准,这样是不是可以满足?这样可以做得和视频同步,即使中间播放卡了还是同步的。 nongxiaoming 发表于 2014-12-2 10:52
我是看了上面发现你说发字幕,还以为你是发字幕的。我的意思是你直接开个线程去轮询IMediaPosition接口里 ...
妥了,先尝试一下! kinsno 发表于 2014-12-2 11:12
妥了,先尝试一下!
还有你说的这个网友提供的这个代码在XP上不准的原因其实是你系统没有安装chrome浏览器啊。其实这样去轮询这个时间也是不准的,在win7下也是一样。在sleep(1)的时候线程让出,这时候要再次被唤醒需要下一个系统调度tick,而windows默认就是15.625ms一个tick的,也就是每秒64个tick,所以再次激活就差很大了。而chrome浏览器运行的时候,会把系统tick改成1000,这时候就准了,因为系统tick被改成了1ms一个。我在我的电脑上验证过,运行chrome再运行这段代码和不运行chrome完全是两个不同的结果。 nongxiaoming 发表于 2014-12-2 11:27
还有你说的这个网友提供的这个代码在XP上不准的原因其实是你系统没有安装chrome浏览器啊。其实这样去轮询 ...
小农你这个“定时不准和谷歌浏览器有关”说法有问题啊;
XP上面确实没装谷歌浏览器,时间在30MS左右;
但我在WIN7上面运行,确实是25MS间隔,但我的WIN7上面也没装谷歌浏览器啊; kinsno 发表于 2014-12-2 11:58
小农你这个“定时不准和谷歌浏览器有关”说法有问题啊;
XP上面确实没装谷歌浏览器,时间在30MS左右;
但 ...
想过了,你用单片机作一个25MS的定时器,简单一点用PC的串口(也可以用信号脚控制)。 这样可以跟操作系统无关,哪怕你用在LINUX 帖子内容看了一遍,很受启发 kinsno 发表于 2014-12-2 09:58
用你那个,关键是我不晓得把把串口发送放在哪个地方啊,是不是放在我上面所说的那个地方啊?那样子的话, ...
是那个地方不错,
不过最好还是封装一下,串口的初始化放在while循环之前,串口的关闭放在wihle循环之后,while里面发送一个event,你就可以捕获事件了,另外while的循环条件使用一个变量,通过这变量来控制while的退出,从而造成线程的正确退出。
封装里面有需要有:start()函数 ---->启动线程,thread。start 的时候是可以传递一个参数的,可以通过这个参数传递串口的端口号,文件名等
封装里面有需要有:stop()函数 ---->关闭线程,修改while循环的条件,造成线程正常退出。最好不要直接杀死线程,这样可能会造成资源没有正确释放....第二次启动线程就出麻烦了
这些都涉及到多线程编程,有些技巧还是要慢慢琢磨的....... kinsno 发表于 2014-12-2 11:58
小农你这个“定时不准和谷歌浏览器有关”说法有问题啊;
XP上面确实没装谷歌浏览器,时间在30MS左右;
但 ...
win7 sleep(1) 我这里出来的效果确实是1ms的,难不到是win7的默认tick >= 1000,xp默认的tick = 64 ? gwnpeter 发表于 2014-12-2 14:19
win7 sleep(1) 我这里出来的效果确实是1ms的,难不到是win7的默认tick >= 1000,xp默认的tick = 64 ...
不知道,我这里XP电脑上用,基本上是在31-32MS左右的;闹不明白啊; gwnpeter 发表于 2014-12-2 14:19
win7 sleep(1) 我这里出来的效果确实是1ms的,难不到是win7的默认tick >= 1000,xp默认的tick = 64 ...
但我这边win7测试确实是这样呢,chrome开起来就准,关闭后就不准了。开起来后还是蛮准的,关闭后就不是了。我用的win7 64位旗舰版,下面是我的截图:
网友给的那段代码有些语法问题,我修了一下,我测试用的代码如下:
static void Main(string[] args)
{
DateTime ot = System.DateTime.Now;
TimeSpan ts;
int t1;
int t2=0;
do
{
ts = System.DateTime.Now - ot;
t1 = (int)ts.TotalMilliseconds;
t1 = t1 / 25;
if (t1 != t2)
{
t2 = t1;
Console.WriteLine("line:" + t1.ToString() + " at " + ts.TotalMilliseconds.ToString());
}
System.Threading.Thread.Sleep(1);
} while (true);
} nongxiaoming 发表于 2014-12-2 14:35
但我这边win7测试确实是这样呢,chrome开起来就准,关闭后就不准了。开起来后还是蛮准的,关闭后就不是了 ...
还有这样................我没有用chrome............
页:
1
[2]