Closed lihaoyxj closed 11 years ago
说清楚点,怎么重现。你的报告语法都存在错误, 实在费解。
bool CVideoParseDlg::StartVideoPlay( string Filename,int nStartTime ) { if (!win.open(Filename.c_str(), MEDIA_TYPE_FILE)) return false;
threadid = AfxBeginThread((AFX_THREADPROC)play_thread,(void*)&win);
double dCurrtime =nStartTime;
double dAlltime = win.duration();
double nProcess = (dCurrtime-10)/dAlltime;
char szTmp[200];
sprintf(szTmp,"%f,c:%f,a:%f",nProcess,dCurrtime,dAlltime);
LOGEX(__FILE__,__LINE__,szTmp);
///Sleep(200);我是在这里加了延时后则可以正常的达到获取进度到预期的位置,如果没有这句,则播放是到了seek_to,但是获取当前播放进度是从0开始
win.seek_to(nProcess);
bPlaying = true;
SetTimer(7,1000,NULL);
return true;
}
seek to 是有延时的。 seek 了立即获得时间是不行的。得等一下。
seek后,我是在定时器里,每隔一秒获得一次,相当于播放器的进度条,当不sleep直接seek后,获得的播放进度是从0开始,但实际的播放进度是seek的位置
不sleep直接seek是什么意思?从0开始又是什么意思? 麻烦学一下表达。
另外,不要在已经关闭的 issue 上继续回复
这个问题好像之前确实存在, 但我已经有过修改, 我将再进一步跟踪这个问题. 3Q
jack,我建议你重新开一个 issue ,然后写上详细的错误描述。
这样有助于追踪 bug
CAI, 你说的有道理, 不过这个就算了
threadid = AfxBeginThread((AFX_THREADPROC)play_thread,(void*)&win); win.seek_to(nProcess); 这个问题的根源我觉得应是线程在创建时相对较慢,而seek_to是调用创建线程时就调用了,从而在win这个对象中变成了类似 pos = nProcess;然后线程又调用了pos = 0;吧
此问题应该已修复.
开启播放线程后seek_to后,获取curr_play_time()错误,是从0开始而不是seek_to的位置,是打五笔时,不看屏幕也不看键盘,看QQ造成的。