談談PostThreadMessage使用

2021-06-05 21:56:52 字數 1205 閱讀 2607

今天不csdn是怎麼了,又訪問不了了。

第一年學習mfc,使用多執行緒還算嫻熟。但一直卻不知道訊息佇列是基於執行緒的,可謂悲劇,說著都臉紅。今天有這麼乙個需求,多個工作執行緒在完成時需要寫日誌,該功能非必要功能,由於寫的量還是比較大,而且多個執行緒同時寫乙個檔案我也不知道會不會出問題,雖然現在我開20個執行緒的時候沒有發現檔案被寫亂的情況,但是還是有點擔心的。決定使用另乙個執行緒來完成寫日誌的功能。我在想,使用事件等待如何,如果同時有兩個執行緒使得事件有訊號,是不是其中乙個會丟失;說到這,忽然想到我使用的訊息機制,訊息會不會被合併呢,想wm_paint一樣,應該不會,好像wm_paint是乙個特殊訊息吧。這個需要下去驗證一下,反正我的程式跑起來現在沒發現問題。

在寫日誌執行緒中使用peekmessage或使用getmessage建立訊息迴圈,我在專案中使用的時候peekmessage使用pm_remove居然也沒有移除訊息,導致一直迴圈不停,改用getmessage問題解決,還沒找到原因,太忙了。問題是:posthreadmessage是阻塞的嗎,根據我答應的日誌,該函式不是阻塞的,不會導致工作現場阻塞。有的地方說使用getmessage會導致訊息傳送方阻塞,可能說的是sendmessage吧,但用sendmessage難道訊息迴圈用peekmessage就不阻塞了嗎?奇怪。

**後面在提上了

優先佇列,乙個我認為會按我想法工作的佇列,最後讓我悲催了。專案需求是優先順序不同的,小的優先,優先順序相同的,先進佇列的優先出隊。多麼簡單的乙個想法,最後在stl的priority_quene面前,我 倒下了,一直以為這很簡單,過載比較操作符不就搞定了嗎?測試的時候也不仔細,對優先順序相同的沒怎麼測,忽然在要完結準備提測的時候,發現問題,優先順序相同的出隊順序並不是按入隊順序進行的。原因???原因就是:priority_quene底層是用堆排序實現的。第一反應,那這個真要重寫乙個優先佇列了。當然最後還是使用priority_quene,但我不得不在入隊優先順序上做文章,把原先規定的優先順序進行調整,把入隊序號作為優先順序的一部分加入,最後也導致我改了幾個優先順序操作的地方,雖然比起重寫少花點時間,但**變得奇怪了,為什麼這樣加乙個數上去,而且幸虧我這個專案這樣可以解決,如果這樣不行呢,不是浪費太多了。

總結就是:引入專案中的東西,自己要非常熟悉其特性的,如果不熟悉最好不要盲目引入專案,可以先調研好特性是否完全滿足要求才加入,否則會導致浪費人力物力不討好。

這幾天在看鬼谷子的《本經陰符七術》很有意思。發現自己要學習的其實很多,對自己的認識還不夠。不清楚自己到底想要什麼,又如何能夠靜下心來呢?鬼谷子,乃一神人也。

談談標頭檔案

標頭檔案為所有extern物件宣告,函式宣告以及inline函式 模板 定義提供了乙個集中的位置。1 標頭檔案提供了兩個保證 第一,保證所有檔案都包含同乙個 全域性物件 或函式的同乙份申明。同乙個物件只能有乙個定義,但是可以有多個宣告,如果在每個需要用到物件的地方都手動加上宣告,有可能出現有點地方宣...

談談考試系統

這幾天又在忙考試系統的事了,學校中總有那麼多得考試,每個學院的領導都希望實現學生無紙化考試,一來方便老師判卷的同時,也鍛鍊了學生計算機的能力,同時對大學老師教學有乙個督促的作用。我們的考試系統有很多的不足之處,我們一直都在不斷的改進和完善。考試系統最初是由李雪宇學姐做的,現在看考試系統我總會不由得對...

談談switch語句

switch 語句經常使用,但是要注意一些特殊情況。matlab的switch裡支援以下寫法 switch 1 case i case j 其中,i和j是變數,好處是可以判斷哪個變數為1,以方便處理。c語言不允許以上寫法,switch後面的變數只能是char或者int型別。理解c語言中switch語...