多线程失效原因求助(关于字幕播放的实例)
关于字幕播放的实例。
一个播放视频的线程中,需要播放一个字幕。
int PlayThread::thread_main()
{ ...
while (wait_for_run())
{...
StartCurSubTitle();
...
}
...
}
int PlayThread::StartCurSubTitle()
{...
int state = subTitleThread.get_thread_state();
if (state > 0) //running
{
//stop current subtitle.
subTitleThread.pause_thread();
subTitleThread.ShowNextSub();
}
else if (state < 0) //stopped
{
//create thread , and suppused.
subTitleThread.create_thread(false);//基本上都每次循环都被调用
}
ret = subTitleThread.SetSubTitle(SubTitleThread::SUB_TITLE_FILE, node.subTitleLocalPath);
subTitleThread.resume_thread();//关键这步
return ret;
}
这个是播放线程创建字幕线程,先挂起,然后设置字幕内容,最后再用resume_thread唤醒。问题就出在唤醒上,当循环到198次左右的时候,字幕线程就不能被唤醒了。为什么会这样呢?难道线程没有被真正的释放?
下面是字幕线程的主函数
int SubTitleThread::thread_main()
{...
while (wait_for_run())
{
ret = sub.GetNextString(text);
if (ret == NO_ERROR)
{
if (!text.empty())
ShowSubTitle(text);
}
else
break;
}
...
return 0;
}
字幕线程主要是获得字幕内容,有就播放,没就退出。
大概主体结构就是这样,我想知道的是为什么前198次是正常的,后面就不能播放字幕了?希望大家有什么好的建议。