MFC关于定时器的处理函数执行时间较长而产生的延时

come_on_xueRong 2018-01-08 11:47:34
求大神帮忙,我想用MFC实现一个数据显示器,和MFC自带的Windows media player相关联,要求视频播放的时间和数据横坐标显示的时间是一致的,我觉得理论上视频进度条1秒刷新一次,而我的SetTimer1秒触发一次,应该可以同步,但是发现同时执行时会有延时,绘画区域越多延时时间越长,想请问下大家这个应该怎么解决,多线程的话我试了下不知道是不是方法不对,还是和原来相同,谢谢大家
我对于绘图处理逻辑很不是很好,所以横坐标显示的时候显示距离也不是很均匀


线程执行函数代码
UINT CTest6_05082Dlg::ThreadFunc(LPVOID lpParam)
{
CTest6_05082Dlg *dlg = (CTest6_05082Dlg*)lpParam;
dlg->SetTimer(1,1000,NULL);

return 0;
}
点ji
...全文
1139 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
come_on_xueRong 2018-01-08
  • 打赏
  • 举报
回复
不好意思,我的代码没贴全就提交了 点击打开按钮,执行文本文本读取,向数组中赋值和创建线程触发定时器 //ID == 1负责区域1的播放 if(nIDEvent == 1) { currentPosDouble = m_control.get_currentPosition(); currentPos = m_control.get_currentPositionString(); SetDlgItemText(IDC_EDITTime,currentPos); //----------------------绘制gps图形-------------------------------------------// pLineSeriel->ClearSerie(); drawMovingWithTxt(); LeftMoveArray(dataShowX,location,m_x[location]); //只能显示最新的1秒内的数据 //想办法显示5秒内的数据 //refreshCount每+1代表刷新一秒钟 DrawPointXY(moveLength,refreshCount,location,dataShowX,dataShowY,pLineSeriel); //----------------------绘制总图形-------------------------------------------// //pThread = AfxBeginThread(ThreadFunc,NULL); CompareTag(); } 给纵坐标赋值并左移动纵坐标 drawMovingWithTxt(); 实现左移动横坐标 LeftMoveArray(dataShowX,location,m_x[location]); DrawPointXY中画点
hrtem 2018-01-08
  • 打赏
  • 举报
回复
settimer不适合做这个任务
sevancheng 2018-01-08
  • 打赏
  • 举报
回复
发消息通知控件刷新,定时器优先级很低,在cpu负荷高时定时误差大
come_on_xueRong 2018-01-08
  • 打赏
  • 举报
回复
引用 2 楼 aaadddzxc 的回复:
你用事件或者信号同步不好嘛。定时器不是做同步的
首先谢谢因为这个我主要是想让随着视频的播放绘图也能显示到视频播放的位置,1秒刷新一次,比如视频现在13秒,在绘图区横坐标也可以显示到13秒,我刚刚看了下事件处理,并不是很明白,因为感觉是因为三个函数里面循环太多而导致的1秒的刷新定时器不能完成(不知道这样理解对不对)如果用事件的话。。怎样操作才能实现1秒触发一次呢
xengine-qyt 2018-01-08
  • 打赏
  • 举报
回复
你用事件或者信号同步不好嘛。定时器不是做同步的

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧