基本介紹
- 中文名:PostThreadMessage
- Windows NT:3.1
- Windows:95
- Windows CE:1.0
語法,參數,返回值,其他信息,需求,
語法
BOOLPostThreadMessage(
DWORDidThread,
UINTMsg,
WPARAMwParam,
LPARAMIParam
);
參數
idThread
其訊息將被寄送的執行緒的執行緒標識符。如果執行緒沒有訊息佇列,此函式將失敗。當執行緒第一次調用一個Win 32 USER或GDI函式時,系統創建執行緒的訊息佇列。要得到更多的信息,參見備註。
Msg
指定將被寄送的訊息的類型。
wParam
指定附加的訊息特定信息。
IParam
指定附加的訊息特定信息。
返回值
如果函式調用成功,返回非零值。如果函式調用失敗,返回值是零。若想獲得更多的錯誤信息,請調用GetLastError函式。如果idThread不是一個有效的執行緒標識符或由idThread確定的執行緒沒有訊息佇列,GetLastError返回ERROR_INVALID_THREAD_ID。
其他信息
訊息將寄送到的執行緒必須創建訊息佇列,否則調用PostThreadMessage會失敗。用下列方法之一來處理這種情況:
調用PostThreadMessage。如果失敗,調用Sleep,再調用PostThreadMessage,反覆執行,直到PostThreadMessage成功。
創建一個事件對象,再創建執行緒。在調用PostThreadMessage之前,用函式WaitForSingleObject來等待事件被設定為被告知狀態。訊息將寄送到的執行緒調用PeekMessage(&msg,NULL,WM_USER,WM_USER,PM_NOREMOVE)來強制系統創建訊息佇列。設定事件,表示執行緒已準備好接收寄送的訊息。
訊息將寄送到的執行緒通過調用GetMessage或PeekMessage來取得訊息。返回的MSG結構中的hwnd成員為NULL。
每一個訊息佇列將佇列內的訊息限制在10,000個。這個限制應該已經足夠的大。如果一個程式超過這個限制,它應當被重新設計以避免占用如此多的系統資源。要修改訊息個數的限制,應當修改註冊表中對應的項。
需求
DLL最低版本 | user32.dll |
---|---|
頭檔案 | 在Winuser.h中聲明,包含於Windows.h |
庫檔案 | User32.lib |
作業系統最低版本 | Windows 95, Windows NT 3.1 |
Unicode | 以ANSI和Unicode版本實現 |
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本:頭檔案:winuser.h;輸入庫:user32.lib;Unicode:在Windows NT環境下以Unicode和ANSI方式實現。