用WSAAsyncSelect
能把socket绑定在线程窗口上么?我在线程中建立了窗口,绑定了窗口处理函数,网络事件可以在线程中用getmessage得到,但是无法自动传入线程窗口的消息处理函数,像在主线程中那样。
能把socket绑定在线程窗口上么?我在线程中建立了窗口,绑定了窗口处理函数,网络事件可以在线程中用getmessage得到,但是无法自动传入线程窗口的消息处理函数,像在主线程中那样。
解决方案 »
- vc的调用方式thiscall,等同于stdcall还是cdecl?
- 这个函数随机吗?很简单的问题。
- fcanf与操作系统有关系吗?
- U盘刚插入电脑时,在出现盘符之前,怎样用DeviceIoControl和驱动通信?????
- 程序设置为开机自动启动,用GetCurrentDirectory得到程序的当前路径,为什么出错?
- 谁用VC做过登陆网站的程序
- 在vc6.0英文版中如何把tab的值由4改为8。
- 初学者问题:用odbc连接&打开oracle数据库问题。
- 程序属于哪一种科学?
- yuantao 和DentistryDoctor 在么????
- 进程崩溃时候如何做到千千静听类似的详细崩溃信息显示?
- COleDispatchDriver::CreateDispatch()干什么的?
当出现该函数关注的FD_CONNECT | FD_WRITE事件后,立刻向窗口句柄hWnd发送WM_MYUSER消息。你这种情况,可以在对话框的的宏ON_MESSAGE{}里面添加:ON_MESSAGE
{
WM_MYUSER MyFun(假设这个是你的WM_MYUSER消息响应函数名)
}
ON_MESSAGE(WM_MYUSER, MyFun) //注册消息响应函数
END_MESSAGE_MAP()
主线程:
{
createthread(mythread....);
//这里如果用postmessage(g_ThreadhWnd,TM_START,...)的话不行(why?)
if(0==PostThreadmessage(g_Threadid,TM_START,....)
{
sleep(0);
}
}
子线程:
mythread()
{
......
//建立窗口 绑定窗口消息处理函数
createmywin();
while (GetMessage(&msg, NULL, 0, 0))
{
/*必须加入这里注释的才能使消息进入线程窗口的处理函数DISPATCHMESSAGE()不能传给窗口处理函数
if(msg.message==TM_START)
{
::SendMessage(g_ThreadhWnd,TM_START,NULL,NULL);
}*/
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
问题: while (GetMessage(&msg, NULL, 0, 0))
{
/*必须加入这里注释的才能使消息进入线程窗口的处理函数DISPATCHMESSAGE()不能传给窗口处理函数
if(msg.message==TM_START)
{
::SendMessage(g_ThreadhWnd,TM_START,NULL,NULL);
}*/
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
::SendMessage(g_ThreadhWnd,TM_START,NULL,NULL);
后 子线程的消息处理函数被调用了,他调用了另一个函数,在那个函数里有一个临时getmessage消息循环,但是只接收到第一个WID_SOCKET消息就 退出了,然后上面这个子线程窗口消息循环就再也得不到WID_SOCKET消息了。
我没学过mfc api我只是边学边用,尽量用少的知识来达到我要的效果。
不过也不用了,恐怕我是完不成这个东西了,没时间了。结贴给分吧,自己回去琢磨琢磨