莫名跳出循环

0

大家好!我有一个问题:

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。

(求村长不要再骂我啦>__<)

ava
Forest

2020-4-8

注:我初始化了com::CoInitialize(NULL); // 初始化 COM结束的时候我释放了:::CoUninitialize(); -  Forest  2020-4-8
0

1.问题描述不完整,错误情况叙述不全面,修改你的问题,使问题重点突出,我不知道发生了什么。

2.你应该没有进行调试,按照你的描述,应该是指下面的while失效了,但是我并不知道到底是什么情况。你需要进行调试,如果调试后还找不到原因,再把调试信息补充上来吧。

ava
huidong

2020-4-8

对不起,已修改问题!! -  Forest  2020-4-8
@Forest  现在的问题就是,播放时进入不了下面的循环吗?可以放上调试时单步到那里的截图吗 -  huidong  2020-4-9
截图需要网络URL😂要不加一个qq? -  Forest  2020-4-9
我调试了,没问题啊 -  Forest  2020-4-9
@Forest  意思是,播放时卡在某条语句了,执行不到下面的while? 如果是这样的话,能否步入卡住的地方,看看函数内部是不是有死循环?具体怎么样呢,能不能描述一下你怎么调试的,为什么调试又没问题呢?      这个“调试了,没问题”   指的是什么呢? -  huidong  2020-4-9
可能播放时播放器因为没有播放完视频而独占了线程,那么你可以尝试播放较短的视频看看,看下是不是播放完视频之后,就可以到下面的while了。         如果是这样的话,说明播放器独占了线程进行播放,那么给出一个解决方法:播放前再创建一个线程绘图,主线程用于播放视频,这样就播放视频,绘图两不误了。 -  huidong  2020-4-9
抱歉,不太怎么会用调试,调试没问题是我在播放代码和while语句开头两个情况都打了断点每个试了一下,没报错啊 -  Forest  2020-4-9
@Forest  没报错不等于代码没问题。你按我说的试了吗,是不是播放器独占了线程呢 -  huidong  2020-4-10
我换了个5秒的视屏,播放好后画面停在了最后一帧,点击还是没反应。我也不知道是不是线程的问题 -  Forest  2020-4-10
@Forest  调试一下,在播放的那个函数那里下个断点,然后运行,等他撞到断点上,步过,然后等五秒让他播放完,然后看下什么情况,是停在哪里了还是怎样。还有,你不是有别人用vlc的例子吗,可以看看他是怎么做的,你是不是做错了哪里。 -  huidong  2020-4-10
怎么整一个多线程啊,照你的说法我调试了,额………………跟上面的情况一样啊,卡在最后一帧,还是双线程吧 -  Forest  2020-4-10
@Forest  什么叫卡在最后一帧?一直没明白。意思是调用播放函数播放完成后,还在那个函数里执行,出不来还是怎样?有没有看示例程序的用法?尝试在示例程序上做修改,看看示例程序中播放完成后会不会出现这种情况 -  huidong  2020-4-10
我收回卡在最后一帧的那句话,我发现我没有停止他,我在代码里停止后就可以响应while了,我更新了主贴代吗 -  Forest  2020-4-10
0

盲猜前面出bug导致跳过了while,用调试器看看是不是哪里炸了

ava
无名氏

2020-4-8

那也没有炸………………照常播放,不管while -  Forest  2020-4-8
技术讨论社区
相关提问