莫名跳出循环
大家好!我有一个问题:
vlc_ins = libvlc_new(0, NULL);
if (vlc_ins != NULL)
{
vlc_player = libvlc_media_player_new(vlc_ins);//创建一个示例:
if (vlc_player != NULL)
{
vlc_media = libvlc_media_new_path(vlc_ins, media_name);//通过文件路径创建一个媒体实例 if (vlc_media != NULL)
{
libvlc_media_parse(vlc_media);//解析媒体实例
libvlc_media_player_set_hwnd(vlc_player, hwnd);
libvlc_media_track_info_t* media_tracks = NULL;//获取媒体包含多个的视频和音频轨以及其他类型的轨道信息
libvlc_media_player_set_media(vlc_player, vlc_media);// 把打开的媒体文件设置给播放器 libvlc_media_player_play(vlc_player);// 开始播放视频
}
}
}
while (true)
{
Mouse = GetMouseMsg(); // 获取一条鼠标消息
switch (Mouse.uMsg)
{
case WM_LBUTTONDOWN:
//画画代码
break;
}
}
他响应不了while(1)的消息
但是在视屏加载的时候是有效的.
这说明代码没问题.
我简化了一下,
while里只放画画代码,没有鼠标.
同样在加载的时候有效.
加载完毕时播放,直接覆盖,
居然莫名不管while了
求大家解答怎么解决.
补充,hwnd是easyx窗口的句柄.
现在的问题:在视频加载时、视频播放前,可以响应while里面的消息。但是,加载完毕后播放时,无法响应。调试时编译器没有提示。个人猜测可能出在vlc多线程上。
更新::
vlc_ins = libvlc_new(0, NULL);
if (vlc_ins != NULL)
{
vlc_player = libvlc_media_player_new(vlc_ins);//创建一个示例:
if (vlc_player != NULL)
{
vlc_media = libvlc_media_new_path(vlc_ins, media_name);//通过文件路径创建一个媒体实例 if (vlc_media != NULL)
{
libvlc_media_parse(vlc_media);//解析媒体实例
libvlc_media_player_set_hwnd(vlc_player, hwnd);
libvlc_media_track_info_t* media_tracks = NULL;//获取媒体包含多个的视频和音频轨以及其他类型的轨道信息
libvlc_media_player_set_media(vlc_player, vlc_media);// 把打开的媒体文件设置给播放器 libvlc_media_player_play(vlc_player);// 开始播放视频
}
}
}
Sleep(5000);
// 停止
libvlc_media_player_stop(vlc_player);
// 释放
libvlc_media_release(vlc_media);
// 释放
libvlc_media_player_release(vlc_player);
// 释放
libvlc_release(vlc_ins);
while (true)
{
Mouse = GetMouseMsg(); // 获取一条鼠标消息
switch (Mouse.uMsg)
{
case WM_LBUTTONDOWN:
//画画代码
break;
}
}
现在以为有sleep,播放停止前无法响应,播放完sleep结束了、我停止了才可以,sleep是为了延时不让他过早结束,后期我的想法是在while里面加一个计时器,如果媒体长度==计时器秒数,则停止。即可相应。
现在的问题:视屏播放中无法响应while。
(求村长不要再骂我啦>__<)
注:我初始化了com::CoInitialize(NULL); // 初始化 COM结束的时候我释放了:::CoUninitialize(); - Forest 2020-4-8
1.问题描述不完整,错误情况叙述不全面,修改你的问题,使问题重点突出,我不知道发生了什么。
2.你应该没有进行调试,按照你的描述,应该是指下面的while失效了,但是我并不知道到底是什么情况。你需要进行调试,如果调试后还找不到原因,再把调试信息补充上来吧。
@Forest 意思是,播放时卡在某条语句了,执行不到下面的while? 如果是这样的话,能否步入卡住的地方,看看函数内部是不是有死循环?具体怎么样呢,能不能描述一下你怎么调试的,为什么调试又没问题呢? 这个“调试了,没问题” 指的是什么呢? - huidong 2020-4-9
可能播放时播放器因为没有播放完视频而独占了线程,那么你可以尝试播放较短的视频看看,看下是不是播放完视频之后,就可以到下面的while了。 如果是这样的话,说明播放器独占了线程进行播放,那么给出一个解决方法:播放前再创建一个线程绘图,主线程用于播放视频,这样就播放视频,绘图两不误了。 - huidong 2020-4-9
@Forest 调试一下,在播放的那个函数那里下个断点,然后运行,等他撞到断点上,步过,然后等五秒让他播放完,然后看下什么情况,是停在哪里了还是怎样。还有,你不是有别人用vlc的例子吗,可以看看他是怎么做的,你是不是做错了哪里。 - huidong 2020-4-10
盲猜前面出bug导致跳过了while,用调试器看看是不是哪里炸了