一秒钟内执行一次循环,不满一秒暂停剩下毫秒让一次循环满足一秒

问题描述

注意:不是每隔一秒执行一次,是一秒执行一次需要做一个视频播放和地图画点同步的功能,即A暂停了,地图画点也暂停,A播放地图画点也播放。画点要比较精确的卡在A的每一秒上。现在地图画点是一定能在一秒钟之内完成的。我选来的视频播放privatevoidButtonPlayClick(objectsender,EventArgse){vlcControl_Main.Play();if(!isPlay){//开始走地图画点方法……………………}elseif(isPlay&&isSuspend){isSuspend=false;}}//暂停privatevoidButtonPauseClick(objectsender,EventArgse){vlcControl_Main.Pause();if(isPlay){isSuspend=true;}}//终止privatevoidButtonStopClick(objectsender,EventArgse){vlcControl_Main.Stop();if(isPlay){isStop=true;}}我原来的地图画点的for循环(这里的线程是另起了一个)foreach(varitemincargpslist){try{DateTimebt=DateTime.Now;WaitForMapDrag();this._manualResetEvent.WaitOne();//当需要暂停操作时,阻止后台线程继续执行while(isSuspend&&!isStop){Thread.Sleep(50);}if(isStop)//停止{isSuspend=!isStop;isPlay=!isStop;break;}WaitForMapDrag();this._manualResetEvent.WaitOne();//绘制轨迹………………………………………………………………………sleepseconds=(int)(1000-(DateTime.Now-bt).Milliseconds);Thread.Sleep(sleepseconds);}catch{}}这样基本能够做到不满一秒让线程暂停补足一秒,但是有几个问题。1.每一循环要执行完才sleep,如果是暂停之后再paly,这时候线程没有sleep,导致不能和视频点同步2.点击暂停的时候应该会执行到Thread.Sleep(50)那里面,那么之前那几行代码运行的毫秒数是否可以忽略不计3.这样做每次都要去datetime再计算会不会导致误差越来越大4.用System.Threading.Timer是否更好?有方法能够取到timer已经走过的剩下的毫秒数,或者timer可以暂停,计时一完就走循环?5.顺便问一下关于vlc视频的起始时间点问题,因为很可能视频的第一秒根本就不足一秒,只有几百毫秒,如何取到这个值?

解决方案

解决方案二:
建议用stopwatch
解决方案三:
写个定时器,每隔1Snew个线程出去!
解决方案四:
引用1楼feixuyue的回复:

建议用stopwatch

看了一下还不错,但是我这边还需要一秒钟就reset一下,同时new一个timer结合一下?还是?
解决方案五:
引用3楼izumilen的回复:

Quote: 引用1楼feixuyue的回复:
建议用stopwatch

看了一下还不错,但是我这边还需要一秒钟就reset一下,同时new一个timer结合一下?还是?

这些操作建议放到thread中去开始操作前,调用stopwatch.start操作结束后,调用stopwatch.stop从stopwatch.Elasped.TotalMilliseconds来判断后续需要sleep多长时间为了保证线程很很快响应操作,线程中sleep的时间相应要断一些,否则用户体验不好
解决方案六:
开线程。判断视频播放的位置即时间轴能精确到毫秒最好保存一个时间a线程Sleep可以调整为1判断2对比现在视频的时间和保存的时间a是否在同一秒是则继续循环不是则绘制且把当前视频时间给保存到a。
解决方案七:
不要使用自己构想的sleep来进行所谓的同步。

时间: 2024-09-30 12:54:41

一秒钟内执行一次循环,不满一秒暂停剩下毫秒让一次循环满足一秒的相关文章

怎么在JSP页面内执行装在字符串内的JS代码

问题描述 如何在JSP页面中运行一个字符串,该串内装的是JS代码,也就是说怎么在JSP页面内执行装在字符串内的JS代码该JS的作用是构建一个动态TREE,数据是从数据库中取得的, 解决方案 解决方案二:可以自己编写规则来解析:A-A1,A2,A3|b-b1,b2,b3解决方案三:不知道你说的是否要从后台加载树,如果是的话,你用迭代标签,可以用<logic:iterate>标签或者用<c:forEach>标签.在迭代里面加上js的方法,这样就能循环迭代出来了.goodluck解决方案

按钮-C# 如何在一个窗体内执行另外一个窗口的一个控件的事件

问题描述 C# 如何在一个窗体内执行另外一个窗口的一个控件的事件 问题具体描述是:在Form1里面点击一个按钮,可以执行另外一个Form2里一个按钮对应的事件.像一个登陆界面,一个测试网络的界面,我要点登陆界面的登陆键,可以直接开启测试网络界面一个测试键对应的事件. 我实验过,如果把测试网络界面的测试键对应的事件设法移植到登陆键,很容易造成代码的冗杂,很难看懂.鄙人学识浅薄,还望提点,是否有优化的方案去解决这个问题. 解决方案 这个可以使用 委托 解决. 解决方案二: 用委托, 自定义事件htt

js代码,google浏览器执行1s,IE浏览器内执行,导致ie直接未响应

问题描述 js代码,google浏览器执行1s,IE浏览器内执行,导致ie直接未响应 一段js代码,在google浏览器下执行速度大概在1s左右,但是在IE浏览器内执行,导致ie直接未响应,.主要是想找一个精通JS的,将js进行优化,从而达到ie下执行速度和google下速度基本差不多的情况.能进行QQ远程协助并且沟通. 本人QQ 545718303. 求大神回答.定当感谢.

Java循环语句之 while &amp;#183; doWhile &amp;#183; for &amp;#183; 多重循环

Java循环语句之 while 生活中,有些时候为了完成任务,需要重复的进行某些动作.如参加 10000 米长跑,需要绕 400 米的赛道反复的跑 25 圈.在 Java 中实现功能时,也经常需要重复执行某些代码,例如,我们为了表示"浓烈的爱",希望输出 1000 行"我爱慕课网!".显然,此时重复敲 1000 遍输出语句是不靠谱滴!!那么,有木有好的办法来解决呢? 有,循环语句! Java 常用的 3 种循环: while . do...while . for 本

java怎么在循环时在抛出异常的同时又能跳到循环的下一条

问题描述 java怎么在循环时在抛出异常的同时又能跳到循环的下一条 如题:比如 for(int i=0;i<str.length();i++){ if(i==1){ throw new ApiException("dsf"); //continue; } } 解决方案 看你的目标. 1.查看异常信息.你可以捕获异常,写日志. 2.方法调用的地方处理异常.用list把异常信息存储起来,return. 解决方案二: try { } catch (Exception e) { // T

弹窗-在js代码中执行到某一行代码中手动暂停,然后在手动启动执行

问题描述 在js代码中执行到某一行代码中手动暂停,然后在手动启动执行 我js代码中执行到某一行代码的时候,我想手动的暂停在某一行代码. 然后在通过手动的方式在启动执行下面的代码. 例如:我想在函数a中调用了函数b,而函数b的作用是弹出窗口,让用户输入信息. 我想获取到弹窗用户输入的信息在a函数中用. 但是现在实现的结果不理想.在执行完b函数弹窗的时候,a函数继续往下执行. 获取不到弹窗的用户输入的信息. 那位大神给个思路... 解决方案 function playVideo(){ player.

“分布式猜解”攻击可六秒钟内搞定Visa卡的安全验证

如果在电商网站输错多次某信用卡的有效期和CVV安全码,该网站将禁止使用该信用卡,以防止网络罪犯猜解信用卡.但是电商网站有很多,如果把这些网站同时利用起来猜解信用卡的凭证信息呢?结果是只需6秒钟,就可达到目的. 英国纽卡斯尔大学的研究人员在其论文中介绍,猜解信用卡的有效期并不难,一般Visa信用卡的有效期最多5年,猜解次数就是5*12等于60次,而3位的CVV码是1000次.通过把不同的猜解以"分布式"的方法发送到各个有信用卡支付功能的网站上,可以很快的得到正确的有效期和CVV码. 研究

徐少春:物联网可让爱情火花一秒钟内擦出

徐少春认为,物联网本质还是互联网进一步的延伸."中国讲物联网,IBM讲智慧地球,目的还是提高任何物体之间联系的效果.比如过去100年前,一对男女谈恋爱可能需要10年时间,甚至更长.有了互联网,可能是1年时间.有了物联网后,可能就是一秒钟.我们在大街上,碰到一对男女,如果双方发出一个信息,你的身高.年龄.爱好.信仰,很快就了解,说不定两个人很快就爆出火花.当然这个可能有一点不太现实,还受个人隐私等约束.像我们公司有5700人,很多员工我并不认识,当走进办公区,如果我们每个人的手机都有RFID卡,我

5美元的设备 30秒钟内攻破你的电脑

如今黑客实施网络攻击的成本正在变得越来越低廉.据美国科技新闻网站TheNextWeb报道,已经有安全业界人士推出了只需要5美元的设备,只需半分钟,它可以破解用户的各种密码. 这位业界人士名叫卡马尔(Samy Kamkar),其设备名为"PoisonTap",硬件使用了市场售价只有五美元的廉价迷你电脑Raspberry Pi Zero,实施攻击的软件则为免费软件. 如果把这个设备连接到电脑USB接口上,它就可以开始工作.在30秒钟之内,它可以绕过用户的屏幕锁屏,并且安装一个后门程序,在拔