关于PostMessage的接收,数据超过1000就传递不到消息响应函数

ka7754 2013-09-17 04:33:34
DWORD WINAPI RecvProc(LPVOID lpParameter)
{
SOCKET sock=((RECVPARAM *)lpParameter)->sock;
HWND hWnd=((RECVPARAM *)lpParameter)->hWnd;
delete lpParameter;

char RecvBuf[DataSize];
int err;
int index = 0;
int size=DataSize;
while (size != 0)
{
err = recv(sock,RecvBuf+index,size,0);
if (err == SOCKET_ERROR) break;
else if (err == 0) break;
else
{
size -= err;
index += err;
if(size == 0)
{
size =DataSize;
index=0;
RecvBuf[DataSize]='\0';//
int retval=::PostMessage(hWnd,WM_RECVDATA,0,(LPARAM)RecvBuf);
}
}
}



观察到recv每次只能接收400字节数据,我就写了上面的代码,当我接收超过1000字节时,PostMessage的参数RecvBuf缓存了有所有的数据,但是在WM_RECVDATA的消息响应函数OnRecvData接收不到(调试查看到程序没有跳到那里,跳到recv那里等待了)999字节都完全正常,不是太懂PostMessage的机理,只是在书上看了例子是这么用的,希望哪位大神能给解释下,指点下解决方法~~~~~~
...全文
764 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2013-09-17
  • 打赏
  • 举报
回复
引用 2 楼 ka7754 的回复:
[quote=引用 1 楼 oyljerry 的回复:] PostMessage应该可以支持1000字节,不过它是异步,会不会接收的时候RecvBuf缓冲区已经会修改了
引用 1 楼 oyljerry 的回复:
PostMessage应该可以支持1000字节,不过它是异步,会不会接收的时候RecvBuf缓冲区已经会修改了
如果接收完了,没有数据到来的话就会在recv那里等待 刚才查了下发送1000字节数据时PostMessage的返回值,是1400,MSDN说是窗口句柄无效,我窗口句柄传递的是m_hWnd,不知道哪里错了,刚入门,不懂的太多~~[/quote] FindWindow()
zwfgdlc 2013-09-17
  • 打赏
  • 举报
回复
建议你用wm_copydata来传递数据
ka7754 2013-09-17
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
PostMessage应该可以支持1000字节,不过它是异步,会不会接收的时候RecvBuf缓冲区已经会修改了
引用 1 楼 oyljerry 的回复:
PostMessage应该可以支持1000字节,不过它是异步,会不会接收的时候RecvBuf缓冲区已经会修改了
如果接收完了,没有数据到来的话就会在recv那里等待 刚才查了下发送1000字节数据时PostMessage的返回值,是1400,MSDN说是窗口句柄无效,我窗口句柄传递的是m_hWnd,不知道哪里错了,刚入门,不懂的太多~~
oyljerry 2013-09-17
  • 打赏
  • 举报
回复
PostMessage应该可以支持1000字节,不过它是异步,会不会接收的时候RecvBuf缓冲区已经会修改了

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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