?? 將播放的核心封裝為CMedia后,剩下的事情便是邏輯層了。對于寫過UI程序,并且之前還做了點小程序的段伏櫪來說,這并不是什么很難的事情。唯一的難點在于,播放的時候該如何顯示滾動條以及時間。其實CMedia封裝了獲取當前時間的接口,當然也有獲取整個長度的,根據兩者的比例可以算出來滑動塊的位置。至于時間的顯示,只要轉換一下,也根本不在話下。只是如何應該在哪里獲取呢?主線程肯定是不行的,因為它只能被消息循環占據。所以,唯一的選擇只能是多線程,而這便是段伏櫪多線程旅程的開始。
???
?? 如何開始多線程,也是有章可循,在《Windows CE程序設計》就有相關的章節,只需要調用相應的函數即可。是不是非常簡單?段伏櫪也是這么想的。不就是在線程函數中獲取時間,并做顯示嗎?有什么難度啊?相較之以前的菜鳥階段,段伏櫪整這音樂播放器的邏輯層速度也就快多了,一個星期左右,就將整個程序給完成了。看著自己親手完成的音樂播放器,雖然比不上千千靜聽啊之類,但也讓自己興奮了好一陣。可在實際的測試中,段伏櫪卻發現了個致命的問題:在切換下一曲的時候,偶爾會崩潰!
???
?? 怎么回事,段伏櫪這下可頭大了。仔細查看了下代碼,也找不出蛛絲馬跡。索性將刷新線程給屏蔽掉吧!沒想到,這么一來,一切正常!原來問題是出在多線程上!可這線程會有什么問題呢?咋看都不像有病的樣子。段伏櫪為此而苦惱了好幾天。萬事總有其原因乃至解決之道,有一天段伏櫪不經意間看到一篇帖子,提到多線程可能會有資源占用的問題。不過這文章全是英文的,自己也沒有仔仔細細全部看完,但畢竟給予了靈感。而順著這靈光一閃,段伏櫪找到了問題關鍵所在:在停止播放到開始播放另一個文件的這個間隔中,如果繼續獲取當前時間,那么程序將會崩潰!因為那時候實例已經釋放,直接是使用空指針來提領,能不出錯嗎?
???
?? 找到問題的根源所在,似乎解決問題的方法也不難:不就是因為不知道當前的播放狀態而導致的嗎?自己增添一個變量,分別標示播放完畢以及播放開始,然后在線程中進行判斷,這不就好了嘛?不能不說,這是一個非常正確的解決方式,但卻并不徹底。崩潰的幾率減少了,但卻沒有完全杜絕,偶爾的偶爾還是會崩潰。這究竟是怎么回事呢?不是已經設置標志了嗎?為什么還會這樣呢?這問題肯定還是因為多線程,可是根源在哪里?
???
?? 不得已,段伏櫪只好硬著頭皮將那篇英文文章看完。噢,原來如此!問題很可能在于,子線程在判斷狀態之后,然后開始獲取當前時間的這個間隔呢,可能主線程已經將當前的實例給釋放了!為了避免這情況的發生,只需要加上臨界區即可。這么簡單的問題,卻讓自己想了那么多天;而更為讓自己汗顏的是,這種可能性在文章中已經明明白白寫了出來,僅僅是因為自己的懶惰以及怕麻煩,只是匆匆看一眼,才引發了后續時間的浪費。果然,做技術的,沒有那么多模棱兩可,淺嘗輒止永遠只能有數不盡的麻煩。
???
?? 當將臨界區這一利器添加到代碼之后,段伏櫪長長地舒了一口氣:程序再也不見崩潰了。
???
?? 相對于段伏櫪來說,沈俊就比較凄涼了。對于之前只接受過所謂的高等教育的大學生來說,普遍的動手能力和專業知識水平如何,想必地球人都知道。而沈俊偏偏也不是個例外,也是這普遍中的一員,也就是說,對于硬件設計,她也是一竅不通。只不過,對于軟件來說,只要你選擇了一個方向,那么很容易就能找到相關的入門資料,即使是入門的書籍也是片地開花。可是對于硬件呢?那就沒那么幸運了?有誰見過手把手教的入門書籍的?公司里面唯一和硬件有點沾上邊的,只有黃華中,想他給沈俊講課?那是做夢!估計即使真想講,也說不出個所以然來,畢竟水平在那擺著。黃華中所做的,便只是將機器的原理圖扔給沈俊,然后丟下一句話:“你自己看看原理圖,用心點,好好學學!”
???
?? 毫無經驗的沈俊看著這原理圖,連哭的心都有了:這些是什么啊?為什么要這么連接啊?而這大大的一顆芯片,究竟是做什么用的?段伏櫪唯一能幫的,便是告訴她,可以在www.alldatasheet.com網站中能夠查到相應的IC資料,除此以外,也愛莫能助。不過即使這么一小點,也足以讓沈俊感激涕零,畢竟可以不用那么盲目了。
???
?? 黃華中交給沈俊的任務是,第二版回來了,有一些元器件沒有焊上去,將它們給補上。段伏櫪看著這貼片的元器件,心中不由發顫。想當年大學的時候,有一個設計就是焊接收音機。原理圖,板子,元器件,什么都有,并且這元器件還是插件式的。如果僅僅以一般的焊接工的水平來看,焊接這些東西根本就是小兒科;可對于段伏櫪來說,這可真不是一件省心的火,特別是怎么焊都無法上錫。一個不合格的焊接,能期望有什么良好的結果?所以,那收音機從來就沒響過,連點沙沙的噪音都沒有!所幸這門課的考核非常輕松,只要你拿著一臺焊好的收音機,能收到節目,遞給老師聽就可以過關了。而這檢查,也不是像考試那般需要大家一起進行,而是一個時間點,大家輪流進行。所以最后段伏櫪便借了同學焊接好的一臺收音機,蒙混過關。而對于借給自己收音機的同學,連飯也不用請,因為不僅是段伏櫪,別的同學也是這么做的。甚至可以這么說,整個專業,大概一百來號人,而做出好的收音機不到十臺。換句話來說,大家都是借著這不到十臺的好收音機,互相輪流過關的。噢,My God,這便是所謂的天之驕子的殘酷真實……
???
?? 雖然沈俊的硬件原理水平是一片空白,但在焊接方面還是過得去的。至少和段伏櫪相比,已經是天壤之別了:沈俊能夠焊接貼片器件,并且還能正常工作;而自己整的插件式,卻是啞炮。
???
?? 沈俊來了沒多久,便要回學校了,理由很簡單也非常充分:畢業答辯。只不過,本來預計是兩周之后回來的,但到了期限沈俊還是沒有回來。怎么回事呢?吃飯的時候,段伏櫪問了問黃華中,才知道事情的原委:畢業答辯沒通過。
???
?? 畢業答辯通不過?這也太離譜了吧?雖然每個專業都是有指定的指標,規定這次要有多少人不通過的,但這些指標一般是落在那些經常逃課之類的黑五類啊!沈俊再怎么看,都不像這樣的人。
???
?? 好奇,打個電話問問:“沈俊,怎么回事?畢業答辯沒通過?”
???
?? 雖然僅僅是在電話中,也能聽出沈俊憤怒了:“別提了!我們那導師,在答辯前兩天,說我的這個課題太空泛了,不能作為答辯的題目,讓我重新選題!哎,這課題是他出的讓我選的啊!還有兩天,居然跟我說這課題不行!要是真不行,干嘛不早說!只有兩天,你能讓我怎么辦?”
???
?? “后來呢?”
???
?? “有什么辦法,我就只好重新選新的課題咯,這兩天通宵整論文,最后還是沒過。現在只能等一周后的重新答辯了”
???
?? 聽到這里,段伏櫪明白了,因為之前他的一個高中同學也遇到過類似的事情,于是對沈俊說道:“噢,原來是這樣。我知道你為什么不過了,其實如果你做點事,那么重新答辯你一樣不過。”
???
?? 關系到切身利益,沒有誰不心焦,沈俊急忙問道:“你說嘛!到底怎么回事,別賣關子了!我現在急死了!”
???
?? 聽著沈俊這焦慮的聲音,段伏櫪繼續問道:“你沒有給老師送禮吧?”
???
?? 沈俊很奇怪地問道:“沒有啊,這個有關系嗎?”
???
?? “你這傻妞!難道你沒聽出來嗎?答辯前兩天說題目不合格,這可能嗎?擺明是暗示你,讓你送禮啊!你想啊,作為導師,題目可不可以還不是他說了算?何況這題目還是他自己出的,說不合格那不是自己打自己嘴巴吧嗎?他要的,是要你送禮!你不送,他肯定不會讓你過!”
???
?? 沈俊吃驚得哦了一聲,但還是有點不太相信地說到:“他不會這么惡心吧?畢竟人家是大學教授啊!”
???
?? “哼,在中國,最惡心的就是這些叫獸和磚家,你看他們拋出來的論調,有哪些能獲得大家的認可的?并且他們這些叫獸,如果評不上級別,看著別人的油水嘩啦嘩啦的,他們不眼紅啊?他們也要拿好處的啊。那么這羊毛要出在哪里?那肯定就是在學生的身上!”
???
?? 這時候,沈俊已經有半分相信:“那怎么辦?我要送點什么?”
???
?? “買點酒哦,還有一條好點的煙,最好還包上個紅包,應該也就差不多了……”
???
?? “哦,那好吧。不用再送什么了吧……”
???
?? “一般來說,應該差不多了。如果這叫獸死性不改的話,也許還需要潛規則一下……”
???
?? 沈俊疑惑了:“什么潛規則……”
???
?? “就是演藝圈為了爭到演女主角的那個潛規則啦……”
???
?? 沈俊在電話一頭大叫:“啊?我不會為了這畢業證,還要獻身吧?”
???
?? 段伏櫪無奈地說:“我不知道你那導師的品性,最多我在深圳的仙湖公園幫你拜拜佛,讓他將你那導師變成陽痿吧……”
???
?? “你……”
???
?? 最后,沈俊還是按照段伏櫪的建議,買了兩瓶酒和一條煙,當然還包了個紅包,送到導師家。據說那導師一開始還假惺惺說不能收禮物,但最后還是很高興地拿走了,并且在第二天就給沈俊電話,說讓她放心去答辯,一切包在他身上。結果自然是美好的,沈俊站在答辯臺,念了一下論文的前言,就被告知答辯通過。雖然沈俊最后是花了不少錢,但所幸沒有被潛規則,也算是不幸中之大幸。但至于為何沒有被潛規則,是因為導師根本就沒此打算呢,還是說段伏櫪的拜佛起了作用,那也無從考究了……
- 前言
- 《那些年啊,那些事——一個程序員的奮斗史》——01
- 《那些年啊,那些事——一個程序員的奮斗史》——02
- 《那些年啊,那些事——一個程序員的奮斗史》——03
- 《那些年啊,那些事——一個程序員的奮斗史》——04
- 《那些年啊,那些事——一個程序員的奮斗史》——05
- 《那些年啊,那些事——一個程序員的奮斗史》——06
- 《那些年啊,那些事——一個程序員的奮斗史》——07
- 《那些年啊,那些事——一個程序員的奮斗史》——08
- 《那些年啊,那些事——一個程序員的奮斗史》——09
- 《那些年啊,那些事——一個程序員的奮斗史》——10
- 《那些年啊,那些事——一個程序員的奮斗史》——11
- 《那些年啊,那些事——一個程序員的奮斗史》——12
- 《那些年啊,那些事——一個程序員的奮斗史》——13
- 《那些年啊,那些事——一個程序員的奮斗史》——14
- 《那些年啊,那些事——一個程序員的奮斗史》——15
- 《那些年啊,那些事——一個程序員的奮斗史》——16
- 《那些年啊,那些事——一個程序員的奮斗史》——17
- 《那些年啊,那些事——一個程序員的奮斗史》——18
- 《那些年啊,那些事——一個程序員的奮斗史》——19
- 《那些年啊,那些事——一個程序員的奮斗史》——20
- 《那些年啊,那些事——一個程序員的奮斗史》——21
- 《那些年啊,那些事——一個程序員的奮斗史》——22
- 《那些年啊,那些事——一個程序員的奮斗史》——23
- 《那些年啊,那些事——一個程序員的奮斗史》——24
- 《那些年啊,那些事——一個程序員的奮斗史》——25
- 《那些年啊,那些事——一個程序員的奮斗史》——26
- 《那些年啊,那些事——一個程序員的奮斗史》——27
- 《那些年啊,那些事——一個程序員的奮斗史》——28
- 《那些年啊,那些事——一個程序員的奮斗史》——29
- 《那些年啊,那些事——一個程序員的奮斗史》——30
- 《那些年啊,那些事——一個程序員的奮斗史》——31
- 《那些年啊,那些事——一個程序員的奮斗史》——32
- 《那些年啊,那些事——一個程序員的奮斗史》——33
- 《那些年啊,那些事——一個程序員的奮斗史》——34
- 《那些年啊,那些事——一個程序員的奮斗史》——35
- 《那些年啊,那些事——一個程序員的奮斗史》——36
- 《那些年啊,那些事——一個程序員的奮斗史》——37
- 《那些年啊,那些事——一個程序員的奮斗史》——38
- 《那些年啊,那些事——一個程序員的奮斗史》——39
- 《那些年啊,那些事——一個程序員的奮斗史》——40
- 《那些年啊,那些事——一個程序員的奮斗史》——41
- 《那些年啊,那些事——一個程序員的奮斗史》——42
- 《那些年啊,那些事——一個程序員的奮斗史》——43
- 《那些年啊,那些事——一個程序員的奮斗史》——44
- 《那些年啊,那些事——一個程序員的奮斗史》——45
- 《那些年啊,那些事——一個程序員的奮斗史》——46
- 《那些年啊,那些事——一個程序員的奮斗史》——47
- 《那些年啊,那些事——一個程序員的奮斗史》——48
- 《那些年啊,那些事——一個程序員的奮斗史》——49
- 《那些年啊,那些事——一個程序員的奮斗史》——50
- 《那些年啊,那些事——一個程序員的奮斗史》——51
- 《那些年啊,那些事——一個程序員的奮斗史》——52
- 《那些年啊,那些事——一個程序員的奮斗史》——53
- 《那些年啊,那些事——一個程序員的奮斗史》——54
- 《那些年啊,那些事——一個程序員的奮斗史》——55
- 《那些年啊,那些事——一個程序員的奮斗史》——56
- 《那些年啊,那些事——一個程序員的奮斗史》——57
- 《那些年啊,那些事——一個程序員的奮斗史》——58
- 《那些年啊,那些事——一個程序員的奮斗史》——59
- 《那些年啊,那些事——一個程序員的奮斗史》——60
- 《那些年啊,那些事——一個程序員的奮斗史》——61
- 《那些年啊,那些事——一個程序員的奮斗史》——62
- 《那些年啊,那些事——一個程序員的奮斗史》——63
- 《那些年啊,那些事——一個程序員的奮斗史》——64
- 《那些年啊,那些事——一個程序員的奮斗史》——65
- 《那些年啊,那些事——一個程序員的奮斗史》——66
- 《那些年啊,那些事——一個程序員的奮斗史》——67
- 《那些年啊,那些事——一個程序員的奮斗史》——68
- 《那些年啊,那些事——一個程序員的奮斗史》——69
- 《那些年啊,那些事——一個程序員的奮斗史》——70
- 《那些年啊,那些事——一個程序員的奮斗史》——71
- 《那些年啊,那些事——一個程序員的奮斗史》——72
- 《那些年啊,那些事——一個程序員的奮斗史》——73
- 《那些年啊,那些事——一個程序員的奮斗史》——74
- 《那些年啊,那些事——一個程序員的奮斗史》——75
- 《那些年啊,那些事——一個程序員的奮斗史》——76
- 《那些年啊,那些事——一個程序員的奮斗史》——77
- 《那些年啊,那些事——一個程序員的奮斗史》——78
- 《那些年啊,那些事——一個程序員的奮斗史》——79
- 《那些年啊,那些事——一個程序員的奮斗史》——80
- 《那些年啊,那些事——一個程序員的奮斗史》——81
- 《那些年啊,那些事——一個程序員的奮斗史》——82
- 《那些年啊,那些事——一個程序員的奮斗史》——83
- 《那些年啊,那些事——一個程序員的奮斗史》——84
- 《那些年啊,那些事——一個程序員的奮斗史》——85
- 《那些年啊,那些事——一個程序員的奮斗史》——86
- 《那些年啊,那些事——一個程序員的奮斗史》——87
- 《那些年啊,那些事——一個程序員的奮斗史》——88
- 《那些年啊,那些事——一個程序員的奮斗史》——89
- 《那些年啊,那些事——一個程序員的奮斗史》——90
- 《那些年啊,那些事——一個程序員的奮斗史》——91
- 《那些年啊,那些事——一個程序員的奮斗史》——92
- 《那些年啊,那些事——一個程序員的奮斗史》——93
- 《那些年啊,那些事——一個程序員的奮斗史》——94
- 《那些年啊,那些事——一個程序員的奮斗史》——95
- 《那些年啊,那些事——一個程序員的奮斗史》——96
- 《那些年啊,那些事——一個程序員的奮斗史》——97
- 《那些年啊,那些事——一個程序員的奮斗史》——98
- 《那些年啊,那些事——一個程序員的奮斗史》——99
- 《那些年啊,那些事——一個程序員的奮斗史》——100
- 《那些年啊,那些事——一個程序員的奮斗史》——101
- 《那些年啊,那些事——一個程序員的奮斗史》——102
- 《那些年啊,那些事——一個程序員的奮斗史》——103
- 《那些年啊,那些事——一個程序員的奮斗史》——104
- 《那些年啊,那些事——一個程序員的奮斗史》——105
- 《那些年啊,那些事——一個程序員的奮斗史》——106
- 《那些年啊,那些事——一個程序員的奮斗史》——107
- 《那些年啊,那些事——一個程序員的奮斗史》——108
- 《那些年啊,那些事——一個程序員的奮斗史》——109
- 《那些年啊,那些事——一個程序員的奮斗史》——110
- 《那些年啊,那些事——一個程序員的奮斗史》——111
- 《那些年啊,那些事——一個程序員的奮斗史》——112
- 《那些年啊,那些事——一個程序員的奮斗史》——113
- 《那些年啊,那些事——一個程序員的奮斗史》——114
- 《那些年啊,那些事——一個程序員的奮斗史》——115
- 《那些年啊,那些事——一個程序員的奮斗史》——116
- 《那些年啊,那些事——一個程序員的奮斗史》——117
- 《那些年啊,那些事——一個程序員的奮斗史》——118
- 《那些年啊,那些事——一個程序員的奮斗史》——119
- 《那些年啊,那些事——一個程序員的奮斗史》——120
- 《那些年啊,那些事——一個程序員的奮斗史》——121
- 《那些年啊,那些事——一個程序員的奮斗史》——122
- 《那些年啊,那些事——一個程序員的奮斗史》——123
- 《那些年啊,那些事——一個程序員的奮斗史》——124
- 《那些年啊,那些事——一個程序員的奮斗史》——125
- 《那些年啊,那些事——一個程序員的奮斗史》——126
- 《那些年啊,那些事——一個程序員的奮斗史》——127
- 《那些年啊,那些事——一個程序員的奮斗史》——128 (終章)