win32 消息循环疑惑
2007-10-01 10:14
429 查看
项目遇到的问题, 解决了但是时间紧张的原因 , 没有仔细考虑
INT WINAPI WinMain( HINSTANCE, HINSTANCE, PSTR strCommandLine, INT )
{
.
// 阻塞操作
WaitForSingleObject( g_Event , INIFINITE );
SendMessage (g_hMainWnd, WM_MAINXXX, 0, 0);
.
MSG msg;
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return 0;
}
LRESULT CALLBACK MainWindowProc( HWND hwnd, UINT msg, WPARAM w, LPARAM l )
{
switch(msg)
{
case WM_THREADXXX:
// do -- something // 没有响应, 接收不到 WorkerThread 线呈发送的消息, 正常
break;
case WM_MAINXXX:
// do -- something // 当 g_Event 事件受信后, 此处可以响应 winmain 的 消息
break;
}
return DefWindowProc( hwnd, msg, w, l );
}
DWORD WINAPI WorkerThread( PVOID arg )
{
// 向主窗口线程发送消息, 此时 WinMain 中仍然处于 阻塞状态
// 如果此处换成 SendMessage, 那就不能返回了,
PostMessage (g_hMainWnd, WM_THREADXXX, 0,0);
return 0;
}
由上面的分析我可以得出:
(1) PostMessage 与 SendMessage 的不同点确实存在.
PostMessage : 只是把消息放在窗口线呈的消息对列中,不管是否被处理
SendMessage : 等消息被处理后才返回.
(2) 不能响应 WorkerThread 的 WM_THREADXXX 原因是 WinMain 还有进行消息的派遣和发送
疑惑:
winmain 中在消息派遣进行之前 发送的消息 WM_MAINXXX 为什么就能得到影响??? 此时也没有进行消息循环。
INT WINAPI WinMain( HINSTANCE, HINSTANCE, PSTR strCommandLine, INT )
{
.
// 阻塞操作
WaitForSingleObject( g_Event , INIFINITE );
SendMessage (g_hMainWnd, WM_MAINXXX, 0, 0);
.
MSG msg;
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return 0;
}
LRESULT CALLBACK MainWindowProc( HWND hwnd, UINT msg, WPARAM w, LPARAM l )
{
switch(msg)
{
case WM_THREADXXX:
// do -- something // 没有响应, 接收不到 WorkerThread 线呈发送的消息, 正常
break;
case WM_MAINXXX:
// do -- something // 当 g_Event 事件受信后, 此处可以响应 winmain 的 消息
break;
}
return DefWindowProc( hwnd, msg, w, l );
}
DWORD WINAPI WorkerThread( PVOID arg )
{
// 向主窗口线程发送消息, 此时 WinMain 中仍然处于 阻塞状态
// 如果此处换成 SendMessage, 那就不能返回了,
PostMessage (g_hMainWnd, WM_THREADXXX, 0,0);
return 0;
}
由上面的分析我可以得出:
(1) PostMessage 与 SendMessage 的不同点确实存在.
PostMessage : 只是把消息放在窗口线呈的消息对列中,不管是否被处理
SendMessage : 等消息被处理后才返回.
(2) 不能响应 WorkerThread 的 WM_THREADXXX 原因是 WinMain 还有进行消息的派遣和发送
疑惑:
winmain 中在消息派遣进行之前 发送的消息 WM_MAINXXX 为什么就能得到影响??? 此时也没有进行消息循环。
相关文章推荐
- Win32编程点滴之PreTranslateMessage与消息循环
- Win32 SDK 编程开始, 创建窗口, 消息的处理, 消息循环
- WndProc 与win32程序消息循环
- Delphi中使用Win32 API创建内建消息循环的线程函数
- Win32消息循环机制等【转载】http://blog.csdn.net/u013777351/article/details/49522219
- (win32)句柄,消息循环
- [WPF] Felix 的线程学习笔记(一)——从Win32的消息循环说起
- Win32 SDK 编程开始, 创建窗口, 消息的处理, 消息循环
- MFC 消息循环模拟Win32程序
- MINIGUI,WIN32消息循环中的lParam参数传递时小注意点
- Win32编程点滴之PreTranslateMessage与消息循环
- win32创建窗口及其消息循环
- Windows消息循环(win32)与MFC消息映射,Duilib消息机制
- Win32消息循环机制等【转载】
- win32编程--消息循环
- 关于win32编程中消息循环和WndProc()窗口过程函
- Win32学习笔记——鼠标消息
- 2010.8.1 深入探讨MFC消息循环和消息泵
- Android消息处理机制(二):循环和消息队列的创建
- windows游戏编程 以PeekMessage为核心的消息循环体系