qt thread usage
DeleteSdkThread::DeleteSdkThread(QObject *parent) : QThread(parent)
{
m_runFlag = true;
start();
}
DeleteSdkThread::~DeleteSdkThread()
{
m_runFlag = false;
wait();
}
void DeleteSdkThread::addToSdkInfo(QMap<long long, long long> sdkMap)
{
QMutexLocker locker(&mutex);
xSdkList.append(sdkMap);
}
void DeleteSdkThread::addToAsdkInfo(QList<PlayVideoInfo> list)
{
QMutexLocker locker(&mutex);
sdkList.append(list);
}
void DeleteSdkThread::run()
{
while (1)
{
QThread::msleep(1);
if (!m_runFlag)
break;
mutex.lock();
if (xSdkList.count() == 0 && sdkList.count() == 0)
{
mutex.unlock();
continue;
}
else
{
if (!xSdkList.isEmpty())
{
QMap<long long, long long> sdkInfo = xSdkList.takeFirst();
mutex.unlock();
long long userId = -1;
long long handle;
QMap<long long, long long>::iterator iter = sdkInfo.begin();
while (iter != sdkInfo.end())
{
userId = iter.key();
handle = iter.value();
haikang = new CHaiKangControl();
haikang->deleteSdk(userId, handle);
iter++;
}
}
else if (!sdkList.isEmpty())
{
QList<PlayVideoInfo> list = sdkList.takeFirst();
mutex.unlock();
for (int i = 0; i < list.size(); i++)
{
long long userId = list[i].userId;
long long handle = list[i].m_playHandle;
haikang = new CHaiKangControl();
haikang->deleteSdk(userId, handle);
}
}
}
}
}
class DeleteSdkThread : public QThread
{
Q_OBJECT
public:
DeleteSdkThread(QObject *parent = nullptr);
~DeleteSdkThread();
// 单播放器
void addToSdkInfo(QMap<long long,long long> sdkMap);
// 多播放器
void addToAsdkInfo(QList<PlayVideoInfo> sdkList);
private:
bool m_runFlag;
QMutex mutex;
QList<QMap<long long, long long>> xSdkList; //单播放器
QList<QList<PlayVideoInfo>> sdkList; //多播放器
CHaiKangControl *haikang = nullptr;
protected:
void run();
};
if (!m_playVideoInfo.isEmpty())
{
DeleteSdkThread *deleteSdkThread = new DeleteSdkThread;
deleteSdkThread->addToSdkInfo(m_playVideoInfo);
}