1. 程式人生 > >Windows API一日一練 48 PostThreadMessage函式

Windows API一日一練 48 PostThreadMessage函式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                在寫伺服器程式裡,很多地方都需要使用到執行緒池。特別現在多處理器的 CPU 越來越普及,使用多個執行緒池是明顯提高伺服器程式的效能。在以訊息為基礎的 Windows 系統裡,使用訊息來處理是最簡單的執行緒池辦法,不但使用起來簡單,而且理解起來也很簡單的方法。建立多個執行緒後,就可以根據執行緒的
ID 來向不同的執行緒傳送訊息,每個執行緒都處理自己的訊息。而傳送訊息給執行緒的函式是 PostThreadMessage 函式。下面來演示怎麼樣使用這個函式。   函式 PostThreadMessage 宣告如下:   WINUSERAPI BOOL WINAPI PostThreadMessageA(     __in DWORD idThread,     __in UINT Msg,
    __in WPARAM wParam,     __in LPARAM lParam); WINUSERAPI BOOL WINAPI PostThreadMessageW(     __in DWORD idThread,     __in UINT Msg,     __in WPARAM wParam,
    __in LPARAM lParam); #ifdef UNICODE #define PostThreadMessage PostThreadMessageW #else #define PostThreadMessage PostThreadMessageA #endif // !UNICODE   idThread 是執行緒 ID Msg 是傳送的訊息 ID wParam 是訊息引數。 lParam 是訊息引數。   呼叫函式的例子如下: #001 // 執行緒執行函式。 #002 // 在這裡可以使用類裡的成員,也可以讓派生類實現更強大的功能。 #003 // 蔡軍生  2007/10/11 QQ:9073204 深圳 #004 DWORD CThreadMsg::Run(void) #005 { #006  // 建立執行緒訊息佇列。 #007  MSG msg; #008  PeekMessage(&msg, NULL, WM_USER, WM_USER+1000, PM_NOREMOVE); #009  #010  // #011  for (;;) #012  { #013         // 查詢是否有執行緒訊息處理。 #014         BOOL bRes = PeekMessage(&msg, NULL, WM_USER, WM_USER+1000, PM_REMOVE); #015        if (bRes) #016        { #017              // 在這裡處理本執行緒的訊息。 #018              ::OutputDebugString(_T("CThreadMsg::Run() 有訊息處理 /r/n")); #019        } #020         else #021         { #022               // 等執行緒退出事件。 #023               DWORD dwRet = WaitForSingleObject(m_hEventExit,0); #024               if (dwRet == WAIT_TIMEOUT) #025               { #026                    // 目前沒有做什麼事情,就讓執行緒釋放一下 CPU #027                    Sleep(10); #028               } #029               else #030               { #031                    // 退出執行緒。 #032                    ::OutputDebugString(_T("CThreadMsg::Run() 退出執行緒 /r/n")); #033                    break; #034               } #035         } #036  } #037  #038  // #039  return 0; #040 }   上面實現執行緒的訊息處理。   #001 class CThreadMsg : #002  public CThread #003 { #004 public: #005  CThreadMsg(void); #006  virtual ~CThreadMsg(void); #007  #008  // 傳送一條訊息給執行緒處理。 #009  // 蔡軍生  2007/10/11 QQ:9073204 深圳 #010  void PostMessage(void) #011  { #012         // #013        ::PostThreadMessage(m_dwThreadID,WM_USER+100,0,0); #014  } #015 protected: #016  virtual DWORD Run(void); #017 };   上面是呼叫函式 PostThreadMessage 傳送訊息給執行緒處理。               

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述