线程中socket有关问题,急~

bcfyhy 2006-08-01 09:41:48
三层系统,中间层TQuery每分钟去数据库中读取一个字段,发现改动后将相关信息通过Socket发到客户端,客户端socket接收后,用单独线程解决具体问题,处理完毕后,把是否成功处理的信息返回给中间层。可是又不能在线程中直接用同一个socket发回中间层啊?那怎么办?

有人能告诉我如何实现么?谢谢!
...全文
207 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bcfyhy 2006-08-01
  • 打赏
  • 举报
回复
谢谢!
13661023811 2006-08-01
  • 打赏
  • 举报
回复
在.h窗体文件中添加:
public:
void COPYDATA(TMessage & msg);
protected:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_COPYDATA, TMessage, COPYDATA)
END_MESSAGE_MAP(TForm)
在对应的.cpp中:
void TFormS::COPYDATA(TMessage &msg)
{
if(msg.Msg==WM_COPYDATA)
{
COPYDATASTRUCT *pCDS = (COPYDATASTRUCT *)msg.LParam; //得到命令的详细内容
int msgcmd=pCDS->dwData;//得到命令的类型
int msglen=pCDS->cbData;//得到命令的长度;
char *data=new char[msglen];
memcpy(data,pCDS->lpData,msglen);//命令的详细内容
这里处理data就可以了。
}
}

在线程中发送消息:

HWND h=Form1->Handle;//上面的窗体的句柄
int msglen=msgs.Length()+1;
char *msg = new char[msglen];
String msgs="要发送的消息";
memcpy(msg,msgs.c_str(),msglen);

COPYDATASTRUCT cs;
cs.dwData = msgcmd; //msgcmd是自定义的int,表示通知消息的类型,用来判定很有用
cs.cbData = msglen;
cs.lpData = msg;
int x= SendMessage(h,WM_COPYDATA,(WPARAM)h,(LPARAM)(&cs));
delete []msg;
bcfyhy 2006-08-01
  • 打赏
  • 举报
回复
“将消息返回主线程”如何实现?小弟刚刚接触线程,还是有些发懵
jaffy 2006-08-01
  • 打赏
  • 举报
回复
为什么不能用同一个SOCKET返回呢?我觉得可以将消息返回住现成,然后同一个SOCKET返消息

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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