c 模組間傳遞引數的一些經驗教訓

2021-09-30 14:11:05 字數 895 閱讀 8201

最近在開發一套新產品,測試中發現了一些ui奔潰,自己在設計模組通訊介面方面考慮不周全,在此做一下記錄。

需求:

兩個模組,ui排程模組以及實際功能模組。ui排程模組需要呼叫功能模組,獲取資料,顯示在ui上面。

// 之前的做法:

1.在功能模組,資料放在乙個全域性的list或者vector中,匯出list或vector指標,供ui排程模組使用。

2.ui排程模組,提供乙個全域性指標用於存放傳遞過來的資料.

導致的問題:

ui排程模組頻繁排程功能模組,功能模組裡面的資料,增加或者刪除,排程模組存放的資料就會亂,這樣就會導致訪問越界等問題,程式奔潰。

歸根到底,還是資料的同步問題沒有做好。

////

現在的做法:

1.list或者vector記憶體的申請以及釋放,統一由ui排程模組提供。功能模組只填充資料,介面裡提供ui呼叫模組list或者vector的指標即可。

2.ui排程模組,在所有增加或刪除資料的地方,加鎖。

這樣再怎麼重複呼叫,怎麼重新整理都不會異常了

// 繼續跟新,這樣呼叫在相同的編輯器下,是可以的。但是如果功能模組使用vs2017開發的,ui排程模組使用的vs2010,就會導致堆疊異常。

終極解決方案:

不使用list或者vector傳參,改為陣列指標即可,內部用list或者vector實現。

分析:

list或者vector,都是模板,不同的編譯器,內部實現應該有所差距。比如vs2010對c11支援的不是很好,智慧型指標,std::thread,陣列的預設構造,都不支援。

擴充套件:

設計匯出介面時,不使用模板類,比如string、cstring、vector、list等等,使用基本型別,比如wchar_t*,陣列指標等等,這樣相容性更好。

GUI設計中的一些經驗教訓 1

1.使用動態選單。在現在大部分的程式中都使用了主選單以給使用者提供各種功能。但是有些開發人員為了減少選單的複雜度,常常會在同乙個視窗中根據不同的程式執行狀態動態的新增或刪除一些選單項,這似乎是乙個不錯的方法。這樣設計的前提是開發人員從一開始就假定使用者們很了解這個系統,明白在什麼樣的狀態下系統會提供...

前端頁面設計及Vue使用的一些經驗教訓總結

1.多使用div,合理使用float 2.margin值可設為負值,注意設定為負值後會被覆蓋,可將position relative 3.vue跳轉傳遞引數 4.跨域訪問url 跨域是頁面裡發起http請求時,請求的位址的域和當前頁面的域不同,可以在後台 設定filterconfig,看spring...

最近筆記本主機板等硬體故障的一些經驗教訓

最近筆記本出現了一次非常嚴重的硬體故障,為此我耗費了2天的時間和600元的代價。故障原因 果凍的水分進入了筆記本內部,最終導致筆記本燒了,主機板和顯示卡短路了。出現故障後,我首先拿著保修證和筆記本去了惠普北京維修中心 朝陽區尚都國際。結果是,他們開啟筆記本,看到有水的痕跡,就告知我 不在保修範圍內 ...