小弟学习Win32程序设计,碰到一个问题。
标准的win32程序,最少包含两个函数:WinMain() 和 WinProc();然后在WinMain()函数中创建窗口,进行消息循环[执行GetMessage、TranslateMessage、DispatchMessage操作],在WinProc中处理消息。
现在的问题是:
如果我要在一个程序中动态注册和创建一个窗口(使用Win32API ::CreateWindow),这样我需要一个自己的消息处理体和一个消息循环体;消息处理比较容易,消息循环还是用上面的方法的话,会出现 主进程调用时挂起的问题。现在我只能创建一个线程来处理消息循环,这样的直接后果就是创建N个窗口的时候,同时创建了2*N个线程,导致系统资源开销剧增和其他线程安全上的问题。 所以小弟想请教一下各位牛人,有没有什么好的方法来解决这个问题,消息循环怎么做能最好? PS:看了一些MFC处理这方面的文章,基本上讲的都是如何处理消息分发的,而没有消息获得,循环方面的。
标准的win32程序,最少包含两个函数:WinMain() 和 WinProc();然后在WinMain()函数中创建窗口,进行消息循环[执行GetMessage、TranslateMessage、DispatchMessage操作],在WinProc中处理消息。
现在的问题是:
如果我要在一个程序中动态注册和创建一个窗口(使用Win32API ::CreateWindow),这样我需要一个自己的消息处理体和一个消息循环体;消息处理比较容易,消息循环还是用上面的方法的话,会出现 主进程调用时挂起的问题。现在我只能创建一个线程来处理消息循环,这样的直接后果就是创建N个窗口的时候,同时创建了2*N个线程,导致系统资源开销剧增和其他线程安全上的问题。 所以小弟想请教一下各位牛人,有没有什么好的方法来解决这个问题,消息循环怎么做能最好? PS:看了一些MFC处理这方面的文章,基本上讲的都是如何处理消息分发的,而没有消息获得,循环方面的。
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispthMessage(&msg);
}
else
{
//空闲处理
OnIdle();
}}
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispathMessage(&msg);
}
else
{
//空闲处理
OnIdle();
} }