1,问题:如果不设立单独一个线程去管理播放,则循环体无法通过暂停去终止。
while (m_b_pause)
{
cout << "1"<<endl;
}
1,我们在外面设一个m_b_pause=true变量,然后设置一个暂停按钮,
2,当点击按钮后,让m_b_pause变成false
3,观察while循环是否会退出
4,结论是:no
为了解决上述的问题,就必须单独开辟线程去执行播放功能
代码如下:
//在程序的最上面定义三个全局变量
CEvent start_event;
int terminate_flag;// 暂停的标志
int m_n_currentFrame; //记录map容器中当前播放的照片路径的key,需要在初始化函数里面设为1
map<int, string > m_filenames;//保存照片,需要在初始化函数中对其循环赋值。int 为照片路径的key,string 保存照片的路径
//播放的循环体
// VIDEO是picture控件的ID
DWORD WINAPI PlayVideo(LPVOID lpParam) {
CTestDlg* pThis = (CTestDlg*)lpParam;//指针指向对话框
while (!m_b_pause)
{
WaitForSingleObject(start_event, INFINITE);
start_event.SetEvent();
if (terminate_flag == -1)
{
terminate_flag = 0;
_endthreadex(0);//关闭创建的线程
};
pThis->Display(VIDEO);//输出图片
Sleep(2000);//间隔33毫秒
m_n_currentFrame++;// 每显示一次图片则当前帧就+1
}
return 0;
}
//播放按钮
void