多线程间消息通讯

自定义windows消息

#define MY_MSG  (WM_USER+1)

//为了防止用户自定义消息ID与系统消息ID冲突,用户只能定义WM_USER(0x0400)以后的ID使用

PostThreadMessage    将一个队列消息放入(寄送)到指定线程的消息队列里,不等待线程处理消息就返回

BOOL PostThreadMessage(
DWORD   idThread, //接收消息的线程标识符  
UINT     Msg,     //指定被寄送的消息
WPARAM   wParam,  /附加的消息特定信息
LPARAM   IParam  //附加的消息特定信息
);
//线程没有消息队列,此函数将失败

目标线程通过GetMessage()方法来接收消息,若无消息则阻塞

BOOL GetMessage(
LPMSG lpMsg,  //接收消息的线程ID
HWND hWnd,    //取得消息的窗口的句柄,为NULL时获取所属线程的消息
UINT wMsgFilterMin,//指定被检索的最小消息值的整数。
UINT wMsgFilterMax  //指定被检索的最大消息值的整数
);

PeekMessage 为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构(窥探消息队列中的消息)

BOOL PeekMessage(
LPMSG IpMsg,     //接收消息的线程ID
HWND hWnd,       //取得消息的窗口句柄,为NULL时获取所属线程的消息
UINT wMSGfilterMin,//指定被检索的最小消息值的整数
UINT wMsgFilterMax,//指定被检索的最大消息值的整数
UINT wRemoveMsg   
);
wRemoveMsg   可取下列值
PM_NOREMOVE PeekMessage处理后,消息不从队列里除掉。
PM_REMOVE PeekMessage处理后,消息从队列里除掉。
PM_NOYIELD 此标志使系统不释放等待调用程序空闲的线程。可将PM_NOYIELD随意组合到PM_NOREMOVE或PM_REMOVE
 

猜你喜欢

转载自www.cnblogs.com/liu6666/p/12730192.html