1. 程式人生 > >那些年啊,那些事——一個程式設計師的奮鬥史 ——41

那些年啊,那些事——一個程式設計師的奮鬥史 ——41

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                   將播放的核心封裝為CMedia後,剩下的事情便是邏輯層了。對於寫過UI程式,並且之前還做了點小程式的段伏櫪來說,這並不是什麼很難的事情。唯一的難點在於,播放的時候該如何顯示滾動條以及時間。其實CMedia封裝了獲取當前時間的介面,當然也有獲取整個長度的,根據兩者的比例可以算出來滑動塊的位置。至於時間的顯示,只要轉換一下,也根本不在話下。只是如何應該在哪裡獲取呢?主執行緒肯定是不行的,因為它只能被訊息迴圈佔據。所以,唯一的選擇只能是多執行緒,而這便是段伏櫪多執行緒旅程的開始。
   
   如何開始多執行緒,也是有章可循,在《Windows CE程式設計》就有相關的章節,只需要呼叫相應的函式即可。是不是非常簡單?段伏櫪也是這麼想的。不就是線上程函式中獲取時間,並做顯示嗎?有什麼難度啊?相較之以前的菜鳥階段,段伏櫪整這音樂播放器的邏輯層速度也就快多了,一個星期左右,就將整個程式給完成了。看著自己親手完成的音樂播放器,雖然比不上千千靜聽啊之類,但也讓自己興奮了好一陣。可在實際的測試中,段伏櫪卻發現了個致命的問題:在切換下一曲的時候,偶爾會崩潰!
   
   怎麼回事,段伏櫪這下可頭大了。仔細查看了下程式碼,也找不出蛛絲馬跡。索性將重新整理執行緒給遮蔽掉吧!沒想到,這麼一來,一切正常!原來問題是出在多執行緒上!可這執行緒會有什麼問題呢?咋看都不像有病的樣子。段伏櫪為此而苦惱了好幾天。萬事總有其原因乃至解決之道,有一天段伏櫪不經意間看到一篇帖子,提到多執行緒可能會有資源佔用的問題。不過這文章全是英文的,自己也沒有仔仔細細全部看完,但畢竟給予了靈感。而順著這靈光一閃,段伏櫪找到了問題關鍵所在:在停止播放到開始播放另一個檔案的這個間隔中,如果繼續獲取當前時間,那麼程式將會崩潰!因為那時候例項已經釋放,直接是使用空指標來提領,能不出錯嗎?
   
   找到問題的根源所在,似乎解決問題的方法也不難:不就是因為不知道當前的播放狀態而導致的嗎?自己增添一個變數,分別標示播放完畢以及播放開始,然後線上程中進行判斷,這不就好了嘛?不能不說,這是一個非常正確的解決方式,但卻並不徹底。崩潰的機率減少了,但卻沒有完全杜絕,偶爾的偶爾還是會崩潰。這究竟是怎麼回事呢?不是已經設定標誌了嗎?為什麼還會這樣呢?這問題肯定還是因為多執行緒,可是根源在哪裡?
   
   不得已,段伏櫪只好硬著頭皮將那篇英文文章看完。噢,原來如此!問題很可能在於,子執行緒在判斷狀態之後,然後開始獲取當前時間的這個間隔呢,可能主執行緒已經將當前的例項給釋放了!為了避免這情況的發生,只需要加上臨界區即可。這麼簡單的問題,卻讓自己想了那麼多天;而更為讓自己汗顏的是,這種可能性在文章中已經明明白白寫了出來,僅僅是因為自己的懶惰以及怕麻煩,只是匆匆看一眼,才引發了後續時間的浪費。果然,做技術的,沒有那麼多模稜兩可,淺嘗輒止永遠只能有數不盡的麻煩。
   
   當將臨界區這一利器新增到程式碼之後,段伏櫪長長地舒了一口氣:程式再也不見崩潰了。
   
   相對於段伏櫪來說,沈俊就比較淒涼了。對於之前只接受過所謂的高等教育的大學生來說,普遍的動手能力和專業知識水平如何,想必地球人都知道。而沈俊偏偏也不是個例外,也是這普遍中的一員,也就是說,對於硬體設計,她也是一竅不通。只不過,對於軟體來說,只要你選擇了一個方向,那麼很容易就能找到相關的入門資料,即使是入門的書籍也是片地開花。可是對於硬體呢?那就沒那麼幸運了?有誰見過手把手教的入門書籍的?公司裡面唯一和硬體有點沾上邊的,只有黃華中,想他給沈俊講課?那是做夢!估計即使真想講,也說不出個所以然來,畢竟水平在那擺著。黃華中所做的,便只是將機器的原理圖扔給沈俊,然後丟下一句話:“你自己看看原理圖,用心點,好好學學!”
   
   毫無經驗的沈俊看著這原理圖,連哭的心都有了:這些是什麼啊?為什麼要這麼連線啊?而這大大的一顆晶片,究竟是做什麼用的?段伏櫪唯一能幫的,便是告訴她,可以在www.alldatasheet.com網站中能夠查到相應的IC資料,除此以外,也愛莫能助。不過即使這麼一小點,也足以讓沈俊感激涕零,畢竟可以不用那麼盲目了。
   
   黃華中交給沈俊的任務是,第二版回來了,有一些元器件沒有焊上去,將它們給補上。段伏櫪看著這貼片的元器件,心中不由發顫。想當年大學的時候,有一個設計就是焊接收音機。原理圖,板子,元器件,什麼都有,並且這元器件還是外掛式的。如果僅僅以一般的焊接工的水平來看,焊接這些東西根本就是小兒科;可對於段伏櫪來說,這可真不是一件省心的火,特別是怎麼焊都無法上錫。一個不合格的焊接,能期望有什麼良好的結果?所以,那收音機從來就沒響過,連點沙沙的噪音都沒有!所幸這門課的考核非常輕鬆,只要你拿著一臺焊好的收音機,能收到節目,遞給老師聽就可以過關了。而這檢查,也不是像考試那般需要大家一起進行,而是一個時間點,大家輪流進行。所以最後段伏櫪便借了同學焊接好的一臺收音機,矇混過關。而對於借給自己收音機的同學,連飯也不用請,因為不僅是段伏櫪,別的同學也是這麼做的。甚至可以這麼說,整個專業,大概一百來號人,而做出好的收音機不到十臺。換句話來說,大家都是藉著這不到十臺的好收音機,互相輪流過關的。噢,My God,這便是所謂的天之驕子的殘酷真實……
   
   雖然沈俊的硬體原理水平是一片空白,但在焊接方面還是過得去的。至少和段伏櫪相比,已經是天壤之別了:沈俊能夠焊接貼片器件,並且還能正常工作;而自己整的外掛式,卻是啞炮。
   
   沈俊來了沒多久,便要回學校了,理由很簡單也非常充分:畢業答辯。只不過,本來預計是兩週之後回來的,但到了期限沈俊還是沒有回來。怎麼回事呢?吃飯的時候,段伏櫪問了問黃華中,才知道事情的原委:畢業答辯沒通過。
   
   畢業答辯通不過?這也太離譜了吧?雖然每個專業都是有指定的指標,規定這次要有多少人不通過的,但這些指標一般是落在那些經常逃課之類的黑五類啊!沈俊再怎麼看,都不像這樣的人。
   
   好奇,打個電話問問:“沈俊,怎麼回事?畢業答辯沒通過?”
   
   雖然僅僅是在電話中,也能聽出沈俊憤怒了:“別提了!我們那導師,在答辯前兩天,說我的這個課題太空泛了,不能作為答辯的題目,讓我重新選題!哎,這課題是他出的讓我選的啊!還有兩天,居然跟我說這課題不行!要是真不行,幹嘛不早說!只有兩天,你能讓我怎麼辦?”
   
   “後來呢?”
   
   “有什麼辦法,我就只好重新選新的課題咯,這兩天通宵整論文,最後還是沒過。現在只能等一週後的重新答辯了”
   
   聽到這裡,段伏櫪明白了,因為之前他的一個高中同學也遇到過類似的事情,於是對沈俊說道:“噢,原來是這樣。我知道你為什麼不過了,其實如果你做點事,那麼重新答辯你一樣不過。”
   
   關係到切身利益,沒有誰不心焦,沈俊急忙問道:“你說嘛!到底怎麼回事,別賣關子了!我現在急死了!”
   
   聽著沈俊這焦慮的聲音,段伏櫪繼續問道:“你沒有給老師送禮吧?”
   
   沈俊很奇怪地問道:“沒有啊,這個有關係嗎?”
   
   “你這傻妞!難道你沒聽出來嗎?答辯前兩天說題目不合格,這可能嗎?擺明是暗示你,讓你送禮啊!你想啊,作為導師,題目可不可以還不是他說了算?何況這題目還是他自己出的,說不合格那不是自己打自己嘴巴吧嗎?他要的,是要你送禮!你不送,他肯定不會讓你過!”
   
   沈俊吃驚得哦了一聲,但還是有點不太相信地說到:“他不會這麼噁心吧?畢竟人家是大學教授啊!”
   
   “哼,在中國,最噁心的就是這些叫獸和磚家,你看他們丟擲來的論調,有哪些能獲得大家的認可的?並且他們這些叫獸,如果評不上級別,看著別人的油水嘩啦嘩啦的,他們不眼紅啊?他們也要拿好處的啊。那麼這羊毛要出在哪裡?那肯定就是在學生的身上!”
   
   這時候,沈俊已經有半分相信:“那怎麼辦?我要送點什麼?”
   
   “買點酒哦,還有一條好點的煙,最好還包上個紅包,應該也就差不多了……”
   
   “哦,那好吧。不用再送什麼了吧……”
   
   “一般來說,應該差不多了。如果這叫獸死性不改的話,也許還需要潛規則一下……”
   
   沈俊疑惑了:“什麼潛規則……”
   
   “就是演藝圈為了爭到演女主角的那個潛規則啦……”
   
   沈俊在電話一頭大叫:“啊?我不會為了這畢業證,還要獻身吧?”
   
   段伏櫪無奈地說:“我不知道你那導師的品性,最多我在深圳的仙湖公園幫你拜拜佛,讓他將你那導師變成陽痿吧……”
   
   “你……”
   
   最後,沈俊還是按照段伏櫪的建議,買了兩瓶酒和一條煙,當然還包了個紅包,送到導師家。據說那導師一開始還假惺惺說不能收禮物,但最後還是很高興地拿走了,並且在第二天就給沈俊電話,說讓她放心去答辯,一切包在他身上。結果自然是美好的,沈俊站在答辯臺,唸了一下論文的前言,就被告知答辯通過。雖然沈俊最後是花了不少錢,但所幸沒有被潛規則,也算是不幸中之大幸。但至於為何沒有被潛規則,是因為導師根本就沒此打算呢,還是說段伏櫪的拜佛起了作用,那也無從考究了……           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述