由乙個MFC程式引發的對程式設計嚴謹性的思考

2021-07-22 05:32:44 字數 765 閱讀 2082

手上有乙個基於mfc的桌面應用程式,其主要功能是:通過串列埠接收資料,經簡單處理後在其頁面上進行顯示。這個應用程式已經在某台硬體效能稍好的主機上多次執行,並未發現任何異常現象。然而,在一次系統聯試中,發生了乙個近乎無解的問題:這個應用程式在另一台效能較差的主機上竟然出現了執行即崩潰的現象。專案進度緊張的背景下,這種問題著實讓人抓狂,毫無防備。沒辦法,只能在這台主機上安裝編譯環境對原始碼進行除錯。由於這台主機過於古老,整個安裝過程竟然持續了足有五六個小時,我也只能被迫加班到晚上10點。

經過自己努力和朋友幫忙,最終終於找到了產生上述現象的原因(下面解釋中不寫具體**):

oninitdialog()

ontimer()

程式啟動時,首先建立若干個窗體,然後啟動定時器,在定時器週期到達時,在定時器響應中向上述窗體傳送訊息。在原本硬體效能相對較好的主機上,各個窗體的建立完成先於第乙個定時器週期的到達,因此程式能夠正常執行。而在後來移植到效能較差的主機後,在第乙個定時器週期到達時,並非所有的窗體都建立完成,此時向尚未建立完成的窗體傳送訊息時就引起了程式的崩潰。

在定時器響應函式中,首先判斷是否所有窗體均建立完成(僅判斷最後乙個窗體的指標是否為空即可)。如果是,則函式直接返回;直到判定所有窗體均建立完成時,才繼續執行下面的語句,向各個窗體發訊息。此時定時器響應函式的結構如下:

ontimer()

// 向各個窗體傳送訊息,使它們更新各自頁面中顯示的資料 }

程式設計切不可偷懶啊,每一條語句都要保證其嚴謹可靠。否則,說不定哪天你就會為程式中乙個小小的疏忽買單!

ontimer()

由乙個小程式引發對 size type型別的思考

今天第一天看 演算法導論 看了插入排序演算法。想用c 練習一下,恰好最近也在複習動態陣列以及vector,想分別用動態陣列和vector實現上面的功能。首先,用動態陣列實現沒事,程式如下 用動態陣列實現陣列元素從小到大的排序 includeusing namespacestd int main p ...

乙個由copyBean引發的血案

一次開發中使用輪子bean互轉突然發生了問題 new setdlevel 1 dto dto new dto dto beancopyutils.copybean dto.class system.out.println dto.getdlevel 列印出輸出結果 輸出結果卻變成null,怎麼肥事呢...

乙個由鬥地主引發的血案

王炸 看到這個小故事我也試著拿筆去算了算,唉,尼瑪,去試一下自己的智商下限 然後得出如下思路 地主20,農民17,一共54張牌.那我直接用 20 54 地主拿一張王牌的概率 19 53 地主在有一張王后再拿到王的概率 然後兩個概率相乘 20 54 19 53不就得出了王炸的概率嘛?13.3 在確定王...