程序中有多个地方需要向TV发送字幕显示的数据,如显示音量,显示歌曲信息,滚动字幕等.
上面三个信息中,他们都有优先级别,显示音量最高,显示歌曲信息次之,滚动字幕最小.
每个信息都需要有一个定时器来控制它们的显示时间(不可能总显示在TV上,比如音量五秒,滚动字幕两分钟等),并且对于显示歌曲信息和滚动字幕,还需要另外一个定时器来控制它们移动.所谓的滚动,是靠不停地移动产生的.那么一个信息,将有可能有两个定时器.
当只有两个的时候(如音量和滚动字母),还比较好操作,大不了,在控制音量的代码段里,直接控制滚动字母的计时器的ENabel属性.这样勉强能实现这个功能,但是,当新增信息时,如显示歌曲,改动就特别大,定时器也变得多了起来,很不好管理.
我现在想到的方法是:
把显示字幕的信息封装到一个类里,(如显示的位置,字体大小,颜色,优先级别等),这个类的主要事件就是显示信息.
当有显示的消息产生时,就实例化这个类, 当它的显示时间到了,则释放掉这个类.
那么,就还需一个类,来管理这些实例,并且协调好它们的优先级别.对于这个类,就不知怎么设计了(实例的个数是不定的)..
请教诸位,有没有好的设计思路?
4 个解决方案
#1
没看明白啊。。。。。。。
#2
简单说来,就是有N个定时器,它们都向电视机发送显示命令.但电视机在一个时间,只能显示一条信息,我必须根据这N个定时器所包含的优先级别,找到一个优先级别最高的发过去,其它的就不理了..
最高的时间到了,就把第二个发过去,依次类推...本质上,就是排队问题.
最高的时间到了,就把第二个发过去,依次类推...本质上,就是排队问题.
#3
嗯,还是举例说明吧:
名称 开始时间 持续时间 优先级别 流水号
音量 12:23:40 5 秒 0 1
歌词 12:24:00 10 秒 1 2
字幕 12:24:05 60 秒 2 3
歌词 12:24:15 15 秒 1 4
音量 12:24:20 5 秒 1 5
.....
那么程序响应顺序为:
12:23:40 --- 12:23:45 响应流水号:1 时间: 5秒
12:24:00 --- 12:24:10 响应流水号:2 时间: 10秒
12:24:10 --- 12:24:15 响应流水号:3 时间: 5秒 还差55秒,没办法,别的优先
12:24:15 --- 12:24:20 响应流水号:4 时间: 5秒 还差10秒,没办法,音量优先
12:24:20 --- 12:24:25 响应流水号:5 时间: 5秒 音量响应完毕,返回响应其它事件
12:24:25 --- 12:24:35 响应流水号:4 时间: 10秒 歌词响应完毕,返回响应其它事件
12:24:35 --- 12:25:30 响应流水号:3 时间: 55秒 响应完毕,等待新的任务...
呵呵,上面的例子跟<操作系统>里讲的资源竞争差不多吧..
就是不知道怎样设计,才好一些,要知道,所有的时间,都是用定时器来实现的.所以感觉特麻烦..
名称 开始时间 持续时间 优先级别 流水号
音量 12:23:40 5 秒 0 1
歌词 12:24:00 10 秒 1 2
字幕 12:24:05 60 秒 2 3
歌词 12:24:15 15 秒 1 4
音量 12:24:20 5 秒 1 5
.....
那么程序响应顺序为:
12:23:40 --- 12:23:45 响应流水号:1 时间: 5秒
12:24:00 --- 12:24:10 响应流水号:2 时间: 10秒
12:24:10 --- 12:24:15 响应流水号:3 时间: 5秒 还差55秒,没办法,别的优先
12:24:15 --- 12:24:20 响应流水号:4 时间: 5秒 还差10秒,没办法,音量优先
12:24:20 --- 12:24:25 响应流水号:5 时间: 5秒 音量响应完毕,返回响应其它事件
12:24:25 --- 12:24:35 响应流水号:4 时间: 10秒 歌词响应完毕,返回响应其它事件
12:24:35 --- 12:25:30 响应流水号:3 时间: 55秒 响应完毕,等待新的任务...
呵呵,上面的例子跟<操作系统>里讲的资源竞争差不多吧..
就是不知道怎样设计,才好一些,要知道,所有的时间,都是用定时器来实现的.所以感觉特麻烦..
#4
上面打错了,最后一个音量的优先级别也为:0
#1
没看明白啊。。。。。。。
#2
简单说来,就是有N个定时器,它们都向电视机发送显示命令.但电视机在一个时间,只能显示一条信息,我必须根据这N个定时器所包含的优先级别,找到一个优先级别最高的发过去,其它的就不理了..
最高的时间到了,就把第二个发过去,依次类推...本质上,就是排队问题.
最高的时间到了,就把第二个发过去,依次类推...本质上,就是排队问题.
#3
嗯,还是举例说明吧:
名称 开始时间 持续时间 优先级别 流水号
音量 12:23:40 5 秒 0 1
歌词 12:24:00 10 秒 1 2
字幕 12:24:05 60 秒 2 3
歌词 12:24:15 15 秒 1 4
音量 12:24:20 5 秒 1 5
.....
那么程序响应顺序为:
12:23:40 --- 12:23:45 响应流水号:1 时间: 5秒
12:24:00 --- 12:24:10 响应流水号:2 时间: 10秒
12:24:10 --- 12:24:15 响应流水号:3 时间: 5秒 还差55秒,没办法,别的优先
12:24:15 --- 12:24:20 响应流水号:4 时间: 5秒 还差10秒,没办法,音量优先
12:24:20 --- 12:24:25 响应流水号:5 时间: 5秒 音量响应完毕,返回响应其它事件
12:24:25 --- 12:24:35 响应流水号:4 时间: 10秒 歌词响应完毕,返回响应其它事件
12:24:35 --- 12:25:30 响应流水号:3 时间: 55秒 响应完毕,等待新的任务...
呵呵,上面的例子跟<操作系统>里讲的资源竞争差不多吧..
就是不知道怎样设计,才好一些,要知道,所有的时间,都是用定时器来实现的.所以感觉特麻烦..
名称 开始时间 持续时间 优先级别 流水号
音量 12:23:40 5 秒 0 1
歌词 12:24:00 10 秒 1 2
字幕 12:24:05 60 秒 2 3
歌词 12:24:15 15 秒 1 4
音量 12:24:20 5 秒 1 5
.....
那么程序响应顺序为:
12:23:40 --- 12:23:45 响应流水号:1 时间: 5秒
12:24:00 --- 12:24:10 响应流水号:2 时间: 10秒
12:24:10 --- 12:24:15 响应流水号:3 时间: 5秒 还差55秒,没办法,别的优先
12:24:15 --- 12:24:20 响应流水号:4 时间: 5秒 还差10秒,没办法,音量优先
12:24:20 --- 12:24:25 响应流水号:5 时间: 5秒 音量响应完毕,返回响应其它事件
12:24:25 --- 12:24:35 响应流水号:4 时间: 10秒 歌词响应完毕,返回响应其它事件
12:24:35 --- 12:25:30 响应流水号:3 时间: 55秒 响应完毕,等待新的任务...
呵呵,上面的例子跟<操作系统>里讲的资源竞争差不多吧..
就是不知道怎样设计,才好一些,要知道,所有的时间,都是用定时器来实现的.所以感觉特麻烦..
#4
上面打错了,最后一个音量的优先级别也为:0