关于WSAAsyncSelect()???

okcjh214 2003-12-24 11:39:40
本人写的一个小程序是服务端的,
大概流程是
SOCKET sockListen=socket(AF_INET,SOCK_STREAM,0);
......
bind();listen();
在这之后加了个AfxBeginThread(acceptThread,(LPVOID)sockListen);

UINT acceptThread(LPVOID pParam)
{
SOCKET sockListenClient=(SOCKET)pParam;
HWND hwnd
....
SOCKET Client;
SOCKADDR_IN client;
.....
Client=accept(sockListenClient,(SOCKADDR *)&client,&iAdr);
.....
int resu=WSAAsyncSelect(Client,hwnd,WM_CLIENT_READCLOSE,FD_READ|FD_WRITE);
if(resu)
AfxMessageBox(。。。。);

}
以上是大概的介绍,,但是在执行到wsaasyncselect()这个时,总会报出10022的错误,MSDN的解释是无效的参数,,但却不知是哪个参数有错??
请各位帮个忙。。。
...全文
63 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sboom 2003-12-24
  • 打赏
  • 举报
回复
为什么传this不安全?有时我用CSocket 类时线程里面的指针不能对CSocket对象做某些操作,比如create
tob 2003-12-24
  • 打赏
  • 举报
回复
CXXXApp * pwnd = (CXXXApp *)::AfxGetApp();
hwnd=pwnd->m_pMainWnd->m_hWnd;
javence 2003-12-24
  • 打赏
  • 举报
回复
传this不太安全,还是传窗口句柄好一些!
sboom 2003-12-24
  • 打赏
  • 举报
回复
我的做法是,把主对话筐的this指针传进去,在线程里面在用
CxxxDlg *dlg=(CxxxDlg*)pParam;
hwnd=dlg->GetSafeHwnd();
sockListenClient作为对话筐的成员变量就可以了。
sboom 2003-12-24
  • 打赏
  • 举报
回复
hwnd 无效,hwnd是一个窗口句柄,你的hwnd都没有值的。
worldcup 2003-12-24
  • 打赏
  • 举报
回复
传来传去多麻烦,直接将WM_CLIENT_READCLOSE消息定义在同一个类中用m_hWnd不就完了吗!
当然特殊情况除外!
tob 2003-12-24
  • 打赏
  • 举报
回复
this是指针,不存在安全不安全的。
在CSocket类里面用线程,完全没有问题,不过你要先获得CSocket类的指针。用的时候记得先初始化CSocket(create)再用里面的线程。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧