全局变量
struct sockaddr_in UDPORDER;
struct sockaddr_in UDPFROM;
SOCKET sendsocket;
SOCKET recsocket;
UINT UDPOrderThread(LPVOID lp);
UINT TCPOrderThread(LPVOID lp);
char orderresult[300];
HANDLE eventresult;
HANDLE CanRec;UINT UDPOrderThread(LPVOID lp)
{
int sentlen=0;
int len=sizeof(UDPFROM);
int reclen=0;
while(true)
{
  WaitForSingleObject(CanRec,INFINITE)
  {
    reclen=recvfrom(recsocket,orderresult,sizeof(orderresult),0,(struct sockaddr*)&UDPFROM,&len);//收到数据不变
    orderresult[reclen]=0;
    if(orderresult[2]!=65)
    {
TRACE("不是想要的数据\n");
continue;
    }
    TRACE("收到数据:%s Byte \n",&orderresult[2]);
    ResetEvent(CanRec);
    SetEvent(eventresult);
  }
}
return 1;
}UINT TCPOrderThread(LPVOID lp)
{
  TRACE("\n");
  SetEvent(CanRec);
  WaitForSingleObject(eventresult,5000)
  if(orderresult[2]!=0)
    TRACE("命令返回:%s Bytes \n",&orderresult[2]);
  else 
    TRACE("命令返回:%s \n","没有返回值");  ResetEvent(CanRec);
  ResetEvent(eventresult);
  memset(orderresult,0,sizeof(orderresult));
  return 1;
}OnitialDlg()中
UDPFROM.sin_family =AF_INET;
UDPFROM.sin_port=htons(5000); ///本机监听端口
UDPFROM.sin_addr.s_addr=INADDR_ANY; ///本机
recsocket=socket(AF_INET,SOCK_DGRAM,0);//发送端无所谓端口
bind(recsocket,(struct sockaddr*)&UDPFROM,sizeof(UDPFROM));

eventresult = CreateEvent(NULL, FALSE, FALSE, NULL);
CanRec = CreateEvent(NULL, FALSE, FALSE, NULL);
memset(orderresult,0,sizeof(orderresult));
AfxBeginThread(UDPOrderThread,0);void CPointDlg::OnOK() 
{
AfxBeginThread(TCPOrderThread,0);
}我的本意:
点击ok出一个TCPOrderThread线程  然后让 UDPOrderThread收取数据 然后打印出来
现在问题是:
1\
收到的数据不会更新即 orderresult永远是收到第一次触发TCPOrderThread时候的数据。我想我已经用了2个event事件(是互斥的)所以
应该不用对orderresult  lock了吧
2\
if(WaitForSingleObject(CanRec,INFINITE)==WAIT_OBJECT_0)     WAIT_OBJECT_0这个是什么意思 MSDN上说是The state of the 
specified object is signaled. 但是我SetEvent(CanRec);好像从来没有成功国