記一次程序執行緒dll和MFC訊息迴圈的系列問題

2021-07-15 05:53:41 字數 630 閱讀 9620

主要問題

1、主線程中慎用waitforsingleobject。本次問題出現在當程序b中彈出乙個dlg並設定程序a為其父視窗,之前使用setparent失敗了,所以直接在建構函式中把a的控制代碼穿進去就好了(findwindow來查詢a的控制代碼),但是由於a中使用了waiforsingleobject後,當彈出的dlg使用domodal時,此時向父視窗傳送訊息,而a此時為掛起狀態,故造成訊息阻塞,domodal無法彈出視窗,整個程式也會阻塞崩潰。  這是因為waitforsingleobject只會在接收到他等待的object時才會返回, 這裡要使用mfc的msgwaitformultipleobjects ,該函式只要可以接收到的object都會有返回  這是可以採用迴圈的機制來解決之前阻塞的問題

while (true)

else

}

2、在dll中使用mfc,在使用到涉及資源的函式時,如domodal loadbitmap 等 ,需要在開頭加上 afx_manage_state(afxgetstaticmodulestate()); 

這裡是dll的資源切換,具體沒有深入研究  該函式只在所處函式生命週期內有效、

3、對於bstr char 等new操作或其他建立後記得釋放 不要造成記憶體洩露...

記一次線上環境rabbitmq訊息重複消費的始與末

與這個bug糾結了幾天,從懷疑消費者消費失敗訊息重發到生產者訊息傳送多次,均無果,問題只發生在雲上,測試環境無法重現,陷入了打log到否定問題點的死迴圈,好在重複消費不會影響正常的業務邏輯,不過再次收到重複的消費處理失敗會傳送郵件,郵箱被轟炸了幾天。請教眾方大神無果,把懷疑點瞄準雲服務 這裡就不說是...

當Httpclient遇到執行緒池 記一次爬蟲經歷

要抓的資料量有點多,很多個頁面,並且都一樣的處理,那麼直接就上線程池吧.搜了搜,得到了結果,用executors.newfixedthreadpool 來生產出乙個固定大小的執行緒池,後面所有的任務都會被放置在任務佇列中.ok,開始寫 建立執行緒池executorservice executorse...

記一次線上OOM和效能優化

某次周五,發布前一周的伺服器小動盪?上周五,通過grafana監控,線上環境突然出現cpu和記憶體飆公升的情況 既然伺服器在某個時間點出現了高負荷,於是就先去找一開始出現問題的伺服器,去找耗時的服務,例如我當時去找資料庫耗時的服務,由於上週的日誌已經被刷掉,於是我大致描述一下 admin yyyy ...