关于网友提出的“ 控制台如何分派windows消息(100分只给一人)”问题疑问,本网通过在网上对“ 控制台如何分派windows消息(100分只给一人)”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 控制台如何分派windows消息(100分只给一人)
描述: 我在控制台的main中创建了一个新线程,在线程中进行消息循环
接着用WSAAsyncSelect将套接字绑定到新线程中的窗口句柄g_msg_hwnd中
但是在连接建立之后(确定能建立),网络事件发生了,但绑定窗口却没收到任何消息
如果是自己postmessage给窗口,窗口是确实能收到,能回调的。
现在的问题就是,WSAAsyncSelect绑定的窗口无法收到任何消息。
在win32程序中无此问题。。。
DWORD WINAPI MsgThread(LPVOID lpvoid)
{
g_msg_hwnd = CreateSocketWindow( ::GetModuleHandle(NULL) );
if (NULL == g_msg_hwnd)
return 0;
MSG msg;
while(1)
{
GetMessage(&msg, g_msg_hwnd, 0, 0);
if (msg.message == WM_QUIT)
{
UnInitAsyncSocket();
return 1;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 1;
}
解决方案1: 基于Event的异步模型. 只能一线程等64个event.很蛋疼。,
WSASynSelect 却可以无限连接. 只是窗口消息速度有限。处理不了大量的sock事件消息.因为只在一个窗口线程里处理的.当然也可以把sock消息放到另一个work线程里处理.
你把重要的东西输出下.debug下就应该能找到原因.比如.你创建窗口线程时.可能这个线程还没跑起来.窗口还没建立.所以那个全局hwnd句柄就没正确值. 而你主线程已经执行了WSASynSelect(g_hwnd,FD_CONNECT|.....,sock); 所以后面会窗体收不到sock消息拉.我以前遇到过.先是主线程Sleep几秒,等待窗口线程大概创建ok后再执行窗口与sock绑定关注事件. 你的问题应该就在这里吧.
以上介绍了“ 控制台如何分派windows消息(100分只给一人)”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2978852.html