希望调用PostThreadMessage给一个指定的线程发消息,
thread[i]->PostThreadMessage(WM_TEST, len, (long)pIorb->pData);
第二个和第三个参数分别是消息长度和内容。
调用getMessage函数时如何实现?
也是用GetMessage(&msg, NULL, len1, (long) pIorb->pData)吗?
求各位大侠们给点建议和例子。

解决方案 »

  1.   

    BOOL GetMessage(
      LPMSG lpMsg,         // message information
      HWND hWnd,           // handle to window
      UINT wMsgFilterMin,  // first message
      UINT wMsgFilterMax   // last message
    );if(GetMessage(&msg, NULL, 0, 0))
    {
      switch(msg.message)
      {
      case WM_TEST:
      ...
      }
    }
      

  2.   

    #define MY_QUIT WM_USER+100
    UINT TestThread(LPVOID pParam)
    {
      MSG msg;
      int n=1;
      while(n){
        while(::GetMessage(&msg,NULL,0,0)){
          if(msg.message==MY_QUIT){
    n=0;
    break;
          }
       ::TranslateMessage(&msg);
       ::DispatchMessage(&msg);
       }
     }
     AfxMessageBox("线程结束");
     return 0L;
    }开始线程
    CWinThread *pThread=AfxBeginThread(TestThread,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
    DWORD ThreadId=pThread->m_nThreadId;
    ::PostThreadMessage(ThreadId,MY_QUIT,0,0);
      

  3.   

    参考一下UINT thNetwork(LPVOID p)
    {
    WSANETWORKEVENTS networkEvent;
    unsigned int receivedReqType;

    SOCKADDR_IN addr;
    data.soListen =socket(AF_INET,SOCK_STREAM,0);
    addr.sin_addr.S_un .S_addr=htonl(INADDR_ANY);
    addr.sin_family=AF_INET;
    addr.sin_port =htons(7777);
    bind(data.soListen ,(LPSOCKADDR)&addr,sizeof(addr));
    listen(data.soListen,1);
    ::WSAEventSelect (data.soListen ,data.evListen ,FD_ACCEPT); while(::WaitForSingleObject (data.evStop ,100)==WAIT_TIMEOUT)
    {
    nextIncome:
    if(WaitForSingleObject (data.evListen ,100)!=WAIT_OBJECT_0)//无接入
    {
    continue;
    }
    if(WSAEnumNetworkEvents(data.soListen ,data.evListen  ,&networkEvent)!=0)//失败
    {
    goto nextIncome;
    }
    if(networkEvent.lNetworkEvents !=FD_ACCEPT)
    {
    goto nextIncome;
    } data.soWork =::accept (data.soListen ,NULL,0);
    ::WSAEventSelect (data.soWork ,data.evWork ,FD_READ|FD_CLOSE); while(::WaitForSingleObject (data.evWork ,INFINITE)==WAIT_OBJECT_0)//有客户请求
    {
    if(WSAEnumNetworkEvents(data.soWork,data.evWork ,&networkEvent)!=0)//失败
    {
    ::closesocket (data.soWork );
    goto nextIncome;
    }
    switch(networkEvent.lNetworkEvents)
    {
    case FD_CLOSE:
    ::closesocket (data.soWork );
    goto nextIncome;
    break;
    case FD_READ:
    RecvREQ(&receivedReqType);
    switch(receivedReqType)
    {
    case REQ_LOGIN:
    OnLogin();
    break;
    case REQ_ADD_PERSON:
    OnAddPerson();
    closesocket(data.soWork );
    goto nextIncome;
    break;
    case REQ_ALT_PERSON:
    OnAltPerson();
    closesocket(data.soWork );
    goto nextIncome;
    break;
    case REQ_DEL_PERSON:
    OnDelPerson();
    closesocket(data.soWork );
    goto nextIncome;
    break;
    case REQ_ADD_IMAGE:
    OnAddImage();
    closesocket(data.soWork );
    goto nextIncome;
    break;
    case REQ_DEL_IMAGE:
    OnDelImage();
    closesocket(data.soWork );
    goto nextIncome;
    break;
    default:
    closesocket(data.soWork );
    break;
    }//switch
    }//switch
    }//while
    }
    return 0;
    }
      

  4.   

    发错了。int CServerApp::Run()
    {
    // TODO: 在此添加专用代码和/或调用基类
    MSG msg;

    while(::GetMessage  (&msg,0,0,0))//我自己来维护消息循环
    {
    switch(msg.message )
    {
    case MM_ADD_PERSON:
    this->OnAddPerson(msg.wParam,msg.lParam );
    break;
    case MM_ALT_PERSON:
    OnAltPerson(msg.wParam,msg.lParam );
    break;
    case MM_DEL_PERSON:
    OnDelPerson(msg.wParam,msg.lParam );
    break;
    case MM_ADD_IMAGE:
    OnAddImage(msg.wParam,msg.lParam );
    break;
    case MM_DEL_IMAGE:
    OnDelImage(msg.wParam,msg.lParam );
    break;
    case MM_RECOGN_IMAGE:
    OnRecognImage(msg.wParam,msg.lParam );
    break;
    case MM_LOGIN:
    OnLogin(msg.wParam,msg.lParam );
    break;
    default:
    break;
    }
    ::TranslateMessage (&msg);
    ::DispatchMessage (&msg);
    }
    return 0;//CWinApp::Run();
    }
      

  5.   

    thread[i]->PostThreadMessage(WM_TEST, len, (long)pIorb->pData);
    是不是我用GetMessage (&msg,0,0,0),取消息后得到msg.message = WM_TEST, msg.wParam = len, 
    msg.lParam = pIorb->pData???typedef struct tagMSG { 
        HWND   hwnd;     
        UINT   message; 
        WPARAM wParam; 
        LPARAM lParam; 
        DWORD  time; 
        POINT  pt; 
    } MSG;