《那些年啊,那些事——一个程序员的奋斗史》——41

最后更新于:2022-04-01 11:50:23

   将播放的核心封装为CMedia后,剩下的事情便是逻辑层了。对于写过UI程序,并且之前还做了点小程序的段伏枥来说,这并不是什么很难的事情。唯一的难点在于,播放的时候该如何显示滚动条以及时间。其实CMedia封装了获取当前时间的接口,当然也有获取整个长度的,根据两者的比例可以算出来滑动块的位置。至于时间的显示,只要转换一下,也根本不在话下。只是如何应该在哪里获取呢?主线程肯定是不行的,因为它只能被消息循环占据。所以,唯一的选择只能是多线程,而这便是段伏枥多线程旅程的开始。        如何开始多线程,也是有章可循,在《Windows CE程序设计》就有相关的章节,只需要调用相应的函数即可。是不是非常简单?段伏枥也是这么想的。不就是在线程函数中获取时间,并做显示吗?有什么难度啊?相较之以前的菜鸟阶段,段伏枥整这音乐播放器的逻辑层速度也就快多了,一个星期左右,就将整个程序给完成了。看着自己亲手完成的音乐播放器,虽然比不上千千静听啊之类,但也让自己兴奋了好一阵。可在实际的测试中,段伏枥却发现了个致命的问题:在切换下一曲的时候,偶尔会崩溃!        怎么回事,段伏枥这下可头大了。仔细查看了下代码,也找不出蛛丝马迹。索性将刷新线程给屏蔽掉吧!没想到,这么一来,一切正常!原来问题是出在多线程上!可这线程会有什么问题呢?咋看都不像有病的样子。段伏枥为此而苦恼了好几天。万事总有其原因乃至解决之道,有一天段伏枥不经意间看到一篇帖子,提到多线程可能会有资源占用的问题。不过这文章全是英文的,自己也没有仔仔细细全部看完,但毕竟给予了灵感。而顺着这灵光一闪,段伏枥找到了问题关键所在:在停止播放到开始播放另一个文件的这个间隔中,如果继续获取当前时间,那么程序将会崩溃!因为那时候实例已经释放,直接是使用空指针来提领,能不出错吗?        找到问题的根源所在,似乎解决问题的方法也不难:不就是因为不知道当前的播放状态而导致的吗?自己增添一个变量,分别标示播放完毕以及播放开始,然后在线程中进行判断,这不就好了嘛?不能不说,这是一个非常正确的解决方式,但却并不彻底。崩溃的几率减少了,但却没有完全杜绝,偶尔的偶尔还是会崩溃。这究竟是怎么回事呢?不是已经设置标志了吗?为什么还会这样呢?这问题肯定还是因为多线程,可是根源在哪里?        不得已,段伏枥只好硬着头皮将那篇英文文章看完。噢,原来如此!问题很可能在于,子线程在判断状态之后,然后开始获取当前时间的这个间隔呢,可能主线程已经将当前的实例给释放了!为了避免这情况的发生,只需要加上临界区即可。这么简单的问题,却让自己想了那么多天;而更为让自己汗颜的是,这种可能性在文章中已经明明白白写了出来,仅仅是因为自己的懒惰以及怕麻烦,只是匆匆看一眼,才引发了后续时间的浪费。果然,做技术的,没有那么多模棱两可,浅尝辄止永远只能有数不尽的麻烦。        当将临界区这一利器添加到代码之后,段伏枥长长地舒了一口气:程序再也不见崩溃了。        相对于段伏枥来说,沈俊就比较凄凉了。对于之前只接受过所谓的高等教育的大学生来说,普遍的动手能力和专业知识水平如何,想必地球人都知道。而沈俊偏偏也不是个例外,也是这普遍中的一员,也就是说,对于硬件设计,她也是一窍不通。只不过,对于软件来说,只要你选择了一个方向,那么很容易就能找到相关的入门资料,即使是入门的书籍也是片地开花。可是对于硬件呢?那就没那么幸运了?有谁见过手把手教的入门书籍的?公司里面唯一和硬件有点沾上边的,只有黄华中,想他给沈俊讲课?那是做梦!估计即使真想讲,也说不出个所以然来,毕竟水平在那摆着。黄华中所做的,便只是将机器的原理图扔给沈俊,然后丢下一句话:“你自己看看原理图,用心点,好好学学!”        毫无经验的沈俊看着这原理图,连哭的心都有了:这些是什么啊?为什么要这么连接啊?而这大大的一颗芯片,究竟是做什么用的?段伏枥唯一能帮的,便是告诉她,可以在www.alldatasheet.com网站中能够查到相应的IC资料,除此以外,也爱莫能助。不过即使这么一小点,也足以让沈俊感激涕零,毕竟可以不用那么盲目了。        黄华中交给沈俊的任务是,第二版回来了,有一些元器件没有焊上去,将它们给补上。段伏枥看着这贴片的元器件,心中不由发颤。想当年大学的时候,有一个设计就是焊接收音机。原理图,板子,元器件,什么都有,并且这元器件还是插件式的。如果仅仅以一般的焊接工的水平来看,焊接这些东西根本就是小儿科;可对于段伏枥来说,这可真不是一件省心的火,特别是怎么焊都无法上锡。一个不合格的焊接,能期望有什么良好的结果?所以,那收音机从来就没响过,连点沙沙的噪音都没有!所幸这门课的考核非常轻松,只要你拿着一台焊好的收音机,能收到节目,递给老师听就可以过关了。而这检查,也不是像考试那般需要大家一起进行,而是一个时间点,大家轮流进行。所以最后段伏枥便借了同学焊接好的一台收音机,蒙混过关。而对于借给自己收音机的同学,连饭也不用请,因为不仅是段伏枥,别的同学也是这么做的。甚至可以这么说,整个专业,大概一百来号人,而做出好的收音机不到十台。换句话来说,大家都是借着这不到十台的好收音机,互相轮流过关的。噢,My God,这便是所谓的天之骄子的残酷真实……        虽然沈俊的硬件原理水平是一片空白,但在焊接方面还是过得去的。至少和段伏枥相比,已经是天壤之别了:沈俊能够焊接贴片器件,并且还能正常工作;而自己整的插件式,却是哑炮。        沈俊来了没多久,便要回学校了,理由很简单也非常充分:毕业答辩。只不过,本来预计是两周之后回来的,但到了期限沈俊还是没有回来。怎么回事呢?吃饭的时候,段伏枥问了问黄华中,才知道事情的原委:毕业答辩没通过。        毕业答辩通不过?这也太离谱了吧?虽然每个专业都是有指定的指标,规定这次要有多少人不通过的,但这些指标一般是落在那些经常逃课之类的黑五类啊!沈俊再怎么看,都不像这样的人。        好奇,打个电话问问:“沈俊,怎么回事?毕业答辩没通过?”        虽然仅仅是在电话中,也能听出沈俊愤怒了:“别提了!我们那导师,在答辩前两天,说我的这个课题太空泛了,不能作为答辩的题目,让我重新选题!哎,这课题是他出的让我选的啊!还有两天,居然跟我说这课题不行!要是真不行,干嘛不早说!只有两天,你能让我怎么办?”        “后来呢?”        “有什么办法,我就只好重新选新的课题咯,这两天通宵整论文,最后还是没过。现在只能等一周后的重新答辩了”        听到这里,段伏枥明白了,因为之前他的一个高中同学也遇到过类似的事情,于是对沈俊说道:“噢,原来是这样。我知道你为什么不过了,其实如果你做点事,那么重新答辩你一样不过。”        关系到切身利益,没有谁不心焦,沈俊急忙问道:“你说嘛!到底怎么回事,别卖关子了!我现在急死了!”        听着沈俊这焦虑的声音,段伏枥继续问道:“你没有给老师送礼吧?”        沈俊很奇怪地问道:“没有啊,这个有关系吗?”        “你这傻妞!难道你没听出来吗?答辩前两天说题目不合格,这可能吗?摆明是暗示你,让你送礼啊!你想啊,作为导师,题目可不可以还不是他说了算?何况这题目还是他自己出的,说不合格那不是自己打自己嘴巴吧吗?他要的,是要你送礼!你不送,他肯定不会让你过!”        沈俊吃惊得哦了一声,但还是有点不太相信地说到:“他不会这么恶心吧?毕竟人家是大学教授啊!”        “哼,在中国,最恶心的就是这些叫兽和砖家,你看他们抛出来的论调,有哪些能获得大家的认可的?并且他们这些叫兽,如果评不上级别,看着别人的油水哗啦哗啦的,他们不眼红啊?他们也要拿好处的啊。那么这羊毛要出在哪里?那肯定就是在学生的身上!”        这时候,沈俊已经有半分相信:“那怎么办?我要送点什么?”        “买点酒哦,还有一条好点的烟,最好还包上个红包,应该也就差不多了……”        “哦,那好吧。不用再送什么了吧……”        “一般来说,应该差不多了。如果这叫兽死性不改的话,也许还需要潜规则一下……”        沈俊疑惑了:“什么潜规则……”        “就是演艺圈为了争到演女主角的那个潜规则啦……”        沈俊在电话一头大叫:“啊?我不会为了这毕业证,还要献身吧?”        段伏枥无奈地说:“我不知道你那导师的品性,最多我在深圳的仙湖公园帮你拜拜佛,让他将你那导师变成阳痿吧……”        “你……”        最后,沈俊还是按照段伏枥的建议,买了两瓶酒和一条烟,当然还包了个红包,送到导师家。据说那导师一开始还假惺惺说不能收礼物,但最后还是很高兴地拿走了,并且在第二天就给沈俊电话,说让她放心去答辩,一切包在他身上。结果自然是美好的,沈俊站在答辩台,念了一下论文的前言,就被告知答辩通过。虽然沈俊最后是花了不少钱,但所幸没有被潜规则,也算是不幸中之大幸。但至于为何没有被潜规则,是因为导师根本就没此打算呢,还是说段伏枥的拜佛起了作用,那也无从考究了……
';