單執行緒程式處理訊息的方式!

2021-04-12 14:16:13 字數 831 閱讀 1013

mfc內部**是:

msg message;

while(::getmessage(&message,null,0,0))

::translatemessage(&message);

::dispatchmessage(&message);

}當有訊息需要處理的時侯,getmessage返回,如果沒有投遞任何訊息,則程式掛起,可執行其它程式 。當訊息最終到達的時侯,程式被喚起。translatemessage函式可以將wm_keydown訊息轉換為wm_char;dispatchmessage函式將控制項傳遞給mfc訊息轉儲,由轉儲來通過訊息對映來呼叫函式。

當應用程式需要執行的時間很長的時侯,就需要在應用程式的虛幻中插入下面的程式段:

msg message;

while(::peekmessage(&message,null,0,0,pm_remove))

::translatemessage(&message);

::dispatchmessage(&message);

}這樣慢應用程式仍然在執行,不過如果有了訊息,它將暫停,呼叫處理程式,在處理程式退出,慢應用程式繼續執行。

void ccomputedlg::onstrat()

//這裡當有訊息時,暫停執行,轉入訊息處理,本程式採用的wm_timer訊息

}cdialog::onok();

void ccomputedlg::oncancel()

else

}void ccomputedlg::ontimer(uint nidevent)

cdialog::ontimer(nidevent);

}

單執行緒程式轉為多執行緒

說起來,單執行緒程式轉為多執行緒,需要注意的事情很多,比如,對全域性變數的同步處理,函式的去靜態變數.這次遇到的就是具有靜態屬性的函式問題。專案最開始的時候我們認為所有的並行工作都用多程序來實現了,為了所作的資料訪問層足夠的快,我們選擇了不明智的不支援多執行緒的程式設計方式,完成了大量的資料庫訪問函...

linux c單執行緒I O超時處理

單執行緒i o超時處理 unix下的i o超時處理是乙個很常見的問題,它的通常做法是接收輸入 或傳送輸出 後立刻返回,如果無輸入 或輸出 則n秒後定時返回.一般情況下,處理unix中i o超時的方式有終端方式,訊號跳轉方式和多路復用方式等三種.本節設計乙個定時i o的例子,它從檔案描述符0中讀取乙個...

redis的單執行緒

1 完全基於記憶體,絕大部分請求是純粹的記憶體操作,非常快速。資料存在記憶體中,類似於hashmap,hashmap的優勢就是查詢和操作的時間複雜度都是o 1 2 資料結構簡單,對資料操作也簡單,redis中的資料結構是專門進行設計的 3 採用單執行緒,避免了不必要的上下文切換和競爭條件,也不存在多...