Sunshine Alike

半完美主义

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  35 Posts :: 1 Stories :: 56 Comments :: 0 Trackbacks

常用链接

留言簿(15)

积分与排名

  • 积分 - 49576
  • 排名 - 451

最新随笔

最新评论

好吧,我知道这不是论坛,不过没办法,我已经出离郁闷了.T_T
斗胆一问,希望各位大大捧场

问题为:
在一个我写的socket网络程序里面,我用CreateThread函数传参数给处理函数时收不到

程序是一个C/S结构,在Server那边设好监听断口,Client这边有一个按钮,两个个编程框(一个输入,一个显示)点击按钮时把编程框里的文字发送到Server并接收回应消息.单线程的时候表现正常

但我现在想把这边改成多线程:
点击按钮时Client用CreateThread建新线程,创建一个socket负责与Server通信
使用了一个自定义结构体用于线程参数传递
struct SENDPARAM
{
    SOCKADDR_IN addrTo;
    HWND hWnd;
  CString msg;
};

点击按钮时:
    //创建发送地址信息
    SOCKADDR_IN addrTo;
    addrTo.sin_family
=AF_INET;
    addrTo.sin_port
=htons(atoi(strPort));
    addrTo.sin_addr.S_un.S_addr
=htonl(dwIP);

    
    
//用于收发进程的结构体
    SENDPARAM* sendParam = new SENDPARAM;
    sendParam
->addrTo = addrTo;
    sendParam
->hWnd = m_hWnd;
    GetDlgItemText(IDC_EDIT_SEND, sendParam
->msg);

    HANDLE hThread
=::CreateThread(NULL,0,RecProc,(LPVOID)&sendParam,0,NULL);
    CloseHandle(hThread);

线程函数RecProc:
//取出结构体信息 
SENDPARAM* lpSendStruct = (SENDPARAM*)lpParam;
SOCKADDR_IN addrTo 
= lpSendStruct->addrTo;
HWND hWnd 
= lpSendStruct->hWnd;
CString strSend 
= lpSendStruct->msg;
delete lpSendStruct;
//释放内存
    
    
SOCKET sock 
= socket(AF_INET, SOCK_STREAM, 0);
connect(sock,(SOCKADDR
*)&addrTo,sizeof(SOCKADDR));
//应该多发送一个字节作为结束符
send(sock, strSend, strSend.GetLength()+10);
在接参数的时候前面两个都正常(SOCKADDR_IN,HWND),但是接CString的时候就问题了,
不是无效的指针,就是字符对不上号.
我换过许多种方法,但不成功.最开始我想用传进来的主对话框的句柄直接用全局的GetDlgItemText获取IDC_EDIT_SEND这个编辑框的文字,但是一个字都没有.
后面还试过CHAR的数组替换SENDPARAM里的参数,但是传过来问题依旧...@_@
这是不是字符表示上有问题啊?或者是传值/引用方面的问题?

哪位如果知道原因,请麻烦指点一下吧,thx

posted on 2009-04-16 14:11 Sunshine Alike 阅读(2115) 评论(3)  编辑 收藏 引用

Feedback

# re: [求助一]请教下CreateThread函数传参数的问题 2009-07-03 09:25 flaky
我也遇到类似问题,但是独立调试就是没问题,不知道为什么  回复  更多评论
  

# re: [求助一]请教下CreateThread函数传参数的问题 2009-07-03 09:39 flaky
我看了下代码,首先,CreateThread之后,父进程并不会停止,会继续执行,那么你紧接着就Close了这个线程,这里会不会有问题.

我遇到的问题,是由于作用域产生的,不知道为什么,代码大致是:
TClass A;
{
CreateThread(...&A...);
}
这时A的内容不可得,但是去掉括号就可以了

youjie.zhou gmail
欢迎讨论  回复  更多评论
  

# re: [求助一]请教下CreateThread函数传参数的问题[未登录] 2010-04-22 10:41 a
delete lpSendStruct;//释放内存
你把这句去掉试试  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理