傳送訊息和資料到主視窗 測試

2021-10-12 03:02:15 字數 2128 閱讀 3585

基本框架已經完成了一半,現在就是測試一下,從子視窗中把訊息和資料都傳回主視窗,既然要傳資料,那麼,隨便定義乙個資料結構,然後,在具體的**類中,使用其中儲存的子視窗的控制代碼來把訊息和資料傳給主視窗

void cctpmdspi::

star***()

而主視窗中,收到訊息和資料時,與子視窗中的資料一致:

//測試**

在具體傳送訊息的類中,使用了儲存在類中的子視窗控制代碼,再呼叫了getparent方法來得到主視窗控制代碼,但在測試過程中,因為為了方便除錯,在乙個死迴圈中多次呼叫getparent方法會出現問題(導致問題的原因我沒興趣研究,畢竟我不是碼農),嘗試把getparent方法在迴圈之獲取父視窗控制代碼後,再迴圈的傳送訊息和資料,則沒有問題了,所以後續為了不再多次呼叫getparent方法,乾脆在具體類中儲存主視窗的控制代碼,在類中加上獲取主視窗控制代碼的方法即可,這部分的**已經完成。

既然訊息和資料的傳出和接收沒有問題,現在就應該要先安排訊息處理流程了。

首先,**資料每個tick資料過來之後應該需要對其處理,所以訊息量是源源不斷的,如果直接在主視窗執行緒中處理的話,必定會卡死介面,那麼如果不想卡死主視窗介面的話,那肯定要找個"替死鬼」,也就是在主視窗中再開乙個視窗,然後把主視窗接收到的訊息都傳給它,由子視窗來進行處理或分發到相應的響應物件中,大概如下圖:

但是,問題來了,如果前面訊息傳送時,wparam已經有值了,那後面再傳遞時,wparam的值又是什麼呢?其實這兩次的值都應該在最開始訊息傳遞時就已經確定,因為這些資料是從**視窗發出的,它肯定知道這些資料是幹嘛用的,所以這就需要的wparam拆成兩部分來傳遞。windows的系統訊息也是會把wparam拆成高位元組和低位元組這樣來區分,其實很好理解,wparam是數值型的,而計算機裡面只認0和1,如果要傳的是bool型別的引數,那麼兩位二進位制位足矣,每一位相當於乙個引數的值,但是我們現在傳遞的訊息處理物件的型別和資料實際需要處理的型別可能比較多,那麼我們也可以按高低位元組來,或者只按幾個二進位制位來做。

因為位操作必須要對無符號資料來做,而wparam的實際定義是unsigned int,那就剛好了,但是我不打算用二進位制位來做,因為比較繞。

現在來整理一下,wparam的取值範圍是:nnnnn…

而我只需要一位(10進製位)即可以標識資料處理物件型別

再想想,假如每個資料處理物件後續需要處理的型別有999種,也就是占用3位十進位制位,

那麼算起來的範圍也不過是0~9 999,所以直接的用10進製來做就可以了。如果再做得通用一點的話,就把後面型別占用的位數做成巨集。

//現在統一規定,wparam引數作為子訊息型別,lparam引數為傳遞的資料

//根據wparam來區分,應該把資料傳送給誰去處理,mainengine不處理,只負責訊息資料派發

void cmainengine::

dipatchmsg

(wparam wparam, lparam lparam)

}

onaddmsg方法是把訊息新增到處理物件的訊息列表中。

想象一下咱們學校飯堂,每個人去到飯堂後,自己可以根據自己的喜好,選擇不同或相同的菜,去相應的佇列中排隊取飯,每個人心中有不同的喜好(相當訊息),當然,人是可以自己根據自己的喜好去選擇不同的佇列,但程式中則需要新增乙個看門人,每個人跟看門人說想要打什麼樣的菜,看門人就會跟同學說應該去哪條佇列中排隊,而打飯的大叔(每條佇列配乙個打飯大叔)則依次的給每個人打相應的飯菜。

補充一點,訊息處理物件漏掉了乙個,就是主視窗,因為主視窗主要用於顯示資料的功能(或許再加一些其它輔助功能),所以主視窗也是要接收處理訊息和資料的,上面的示意圖和**都漏掉了這部分,後續在**用補全,前面就不管了。

Kafka傳送訊息到HDFS

本文採用的是kafka0.7.2,安裝好kafka後在kafka的contrib目錄下有關於kafka與hadoop的一系列檔案,我們可以使用hadoop consumer目錄下的指令碼及配置檔案將kafka中某topic的資訊傳送到hdfs中。1.修改test目錄下的test.properties...

子類(子窗體)向主窗體傳送訊息

這裡演示的是,在主窗體 塊中,重寫攔截資訊方法。首先新建乙個類 這個類名定義為msg dllimport user32.dll entrypoint sendmessage private static extern intptr sendmessage int hwnd,int msg,intpt...

如何用Jmeter傳送訊息到Solace JNDI

最近有個需求,要對solace的queue發大量的訊息,然後就想到用jmeter,但是國內國外基本都搜不到這部分的內容,於是在這mark一下 將 sol jms 10.3.0.jar 放到 jmeter home lib 下 登入solace後選擇 jms jndi 進入 queues 新建乙個jm...