dlink 多线程,修正回放线程
This commit is contained in:
+60
-36
@@ -1,4 +1,5 @@
|
||||
#include "PlayThread.h"
|
||||
#include "QApplication"
|
||||
|
||||
|
||||
PlayThread::PlayThread(QObject *parent) : QObject(parent)
|
||||
@@ -38,13 +39,11 @@ void PlayThread::run()
|
||||
|
||||
while(play_control)
|
||||
{
|
||||
while (FrameData.size() > 0) {
|
||||
while (play_start) {
|
||||
//for 不允许自加,需要后面逻辑判断增加
|
||||
for (QList<QByteArray>::iterator i = FrameData.begin(); i != FrameData.end();)
|
||||
{
|
||||
//记录一下运行到延迟之前用了多少时间,需要减掉这部分时间
|
||||
|
||||
|
||||
elapstimer.start();
|
||||
|
||||
CurrentProgress = FrameData.indexOf(*i);
|
||||
@@ -100,19 +99,25 @@ void PlayThread::run()
|
||||
frame.clear();
|
||||
frame.append(data.mid(index));
|
||||
|
||||
qint64 time_gap = time.toMSecsSinceEpoch() - time_tick;
|
||||
|
||||
while((QDateTime::currentMSecsSinceEpoch() - currentTick) < (time_gap/times))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
emit transmit(QHostAddress(ip),port,frame);
|
||||
|
||||
//延迟处理
|
||||
qint64 time_gap = time.toMSecsSinceEpoch() - time_tick - (qint64)(elapstimer.nsecsElapsed()/ 1000000.0);
|
||||
|
||||
time_tick = time.toMSecsSinceEpoch();
|
||||
|
||||
if(time_gap > 0)
|
||||
{
|
||||
while((QDateTime::currentMSecsSinceEpoch() - currentTick) < (time_gap/times))
|
||||
{
|
||||
//等
|
||||
QApplication::processEvents();
|
||||
}
|
||||
}
|
||||
currentTick = QDateTime::currentMSecsSinceEpoch();
|
||||
|
||||
|
||||
//中断播放,一般只有要播放新的文件才会出现这种情况
|
||||
if(play_state == 0)
|
||||
{
|
||||
@@ -120,7 +125,8 @@ void PlayThread::run()
|
||||
}
|
||||
else if(play_state == 1)//正常播放
|
||||
{
|
||||
if(time_gap != 0)
|
||||
/*
|
||||
if(time_gap > 0)
|
||||
{
|
||||
qint64 time_count = time_gap/times;//ms
|
||||
|
||||
@@ -170,18 +176,19 @@ void PlayThread::run()
|
||||
{
|
||||
emit delaytime(time_gap/times,0);
|
||||
}
|
||||
*/
|
||||
|
||||
if(play_state == 1)//如果是正常计时,那么就加
|
||||
|
||||
|
||||
CurrentProgress = FrameData.indexOf(*i);
|
||||
emit progress(FrameData.size() - 1,CurrentProgress);
|
||||
++i;
|
||||
if(i == FrameData.end())
|
||||
{
|
||||
CurrentProgress = FrameData.indexOf(*i);
|
||||
emit progress(FrameData.size() - 1,CurrentProgress);
|
||||
++i;
|
||||
if(i == FrameData.end())
|
||||
{
|
||||
play_state = 0;
|
||||
break;
|
||||
}
|
||||
play_state = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
else if(play_state == 2)//暂停
|
||||
{
|
||||
@@ -224,27 +231,53 @@ void PlayThread::run()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
//延迟处理
|
||||
qint64 time_gap = time.toMSecsSinceEpoch() - time_tick - (qint64)(elapstimer.nsecsElapsed()/ 1000000.0);
|
||||
|
||||
if(time_gap > 0)
|
||||
{
|
||||
while((QDateTime::currentMSecsSinceEpoch() - currentTick) < (time_gap/times))
|
||||
{
|
||||
emit delaytime(time_gap/times,QDateTime::currentMSecsSinceEpoch() - currentTick);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
emit transmit(QHostAddress(ip),port,frame);
|
||||
|
||||
time_tick = time.toMSecsSinceEpoch();
|
||||
|
||||
currentTick = QDateTime::currentMSecsSinceEpoch();
|
||||
*/
|
||||
|
||||
|
||||
//qDebug() << "play time:" << elapstimer.nsecsElapsed() / 1000000.0;
|
||||
}
|
||||
play_state = 0;
|
||||
isChangedPos = false;
|
||||
time_tick = 0;
|
||||
FrameData.clear();
|
||||
//FrameData.clear();
|
||||
play_start = false;
|
||||
break;//退出,结束播放
|
||||
}
|
||||
QThread::msleep(100);
|
||||
QThread::msleep(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PlayThread::resetData()
|
||||
{
|
||||
port_data.clear();
|
||||
|
||||
FrameData.clear();
|
||||
|
||||
time_tick= 0;
|
||||
|
||||
play_start = false;
|
||||
|
||||
play_state = 0;
|
||||
}
|
||||
|
||||
@@ -268,23 +301,14 @@ void PlayThread::playData(QList<QByteArray> data,QMap<quint16,QList<QByteArray>>
|
||||
|
||||
}
|
||||
|
||||
void PlayThread::appendPlayData(QList<QByteArray> data,QMap<quint16,QList<QByteArray>> data2)
|
||||
void PlayThread::appendPlayData(quint32 ip, quint16 port, QByteArray data)
|
||||
{
|
||||
//收到数据后对数据进行分类,重新生成子线程进行解析
|
||||
//qDebug() << "PlayThread:" << QThread::currentThreadId();
|
||||
|
||||
port_data.clear();
|
||||
port_data = data2;
|
||||
|
||||
|
||||
FrameData.clear();
|
||||
FrameData = data;
|
||||
|
||||
time_tick= 0;
|
||||
|
||||
play_state = 1;
|
||||
|
||||
emit progress(FrameData.size() - 1,0);
|
||||
FrameData.append(data);
|
||||
|
||||
emit progress(size() - 1,0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user