const UINT WM_EVENT = WM_USER + 1;
//消息循环
DWORD WINAPI ThreadMessageProc(LPVOID lParam)
{
MSG Msg;
while(true)
{
PeekMessage( &Msg, NULL, 0, 0, PM_REMOVE);
switch( Msg.message )
{
case WM_EVENT:
MessageBox( NULL, "1", "1", 0);
break;
default:
::TranslateMessage(&Msg);
::DispatchMessage(&Msg);
break;
}
Sleep(100);
}
}
int main()
{
DWORD ThreadId;//创建的消息循环线程的线程号
CreateThread( NULL, 0, ThreadMessageProc, NULL, 0, &ThreadId);
PostThreadMessage( ThreadId, WM_EVENT, NULL, NULL );
//……
}
///////////////////////////////////////////////////////////
谁告诉你 PeekMessage( &Msg, NULL, 0, 0, PM_REMOVE); 不删除消息的?
加了 PM_REMOVE 参数后就删除消息了,此时和 GetMessage 的不同在于是消息队列为空时 GetMessage 不会马上返回,而 PeekMessage 会立即返回。
/////////////////////////////////////////////////////////////
你这分明是UI线程嘛。建议用GetMessage,去掉Sleep,
case WM_EVENT:
MessageBox( NULL, "1", "1", 0);
break;
=>
case WM_EVENT:
::TranslateMessage(&Msg);
MessageBox( NULL, "1", "1", 0);
break;