多界面程序中,通信数据直达各个界面的方法

来源:互联网 发布:魔力宝贝linux服务端 编辑:程序博客网 时间:2024/06/04 18:48
CSerialPort     SerialPort;void CSerialPort::ReceiveChar(CSerialPort* port, COMSTAT comstat){DWORD dwError = 0;DWORD BytesRead = 0;unsigned char RXBuff;    void* pRecDataPacket = NULL;for (;;) { ReadFile(port->m_hComm,&RXBuff,1,&BytesRead,&port->m_ov);                if (pRecDataPacket = port->pRecCall((BYTE)RXBuff))        {            WaitForSingleObject((port->hSubsribe),INFINITE);            if (port->m_pOwner)            {                //TRACE("串口接收数据:\n");                ::PostMessage((port->m_pOwner)->m_hWnd,WM_COMM_RXCHAR,(WPARAM)pRecDataPacket,(LPARAM)port->m_nPortNr);            }            else if (port->m_idThread)            {                PostThreadMessage(port->m_idThread,WM_COMM_RXCHAR,(WPARAM)pRecDataPacket,(LPARAM)port->m_nPortNr);            }            SetEvent(port->hSubsribe);        }} // end forever loop}void CSerialPort::UnSubsribeData(void* pWho){    WaitForSingleObject(hSubsribe,INFINITE);    if ((DWORD)pWho == (DWORD)m_pOwner)    {        m_pOwner = NULL;    }    else if ((DWORD)pWho == m_idThread)    {        m_idThread = 0;    }    SetEvent(hSubsribe);}void CSerialPort::SubsribeData(void* pWho,BYTE bType){    WaitForSingleObject(hSubsribe,INFINITE);    if (bType == 0) //窗口    {        m_pOwner = (CWnd*)pWho;        m_idThread = 0;    }    else if (bType == 1)    //线程    {        m_idThread = (DWORD)pWho;        m_pOwner = NULL;    }    SetEvent(hSubsribe);}void SerialInit(void* param){    BYTE        byType;    DWORD       Parm;    PRECCall    pRecCall;    CWnd*       pWnd;    DWORD       dwThreadID;    BYTE        szTestStr[] = "UART test string";    byType       = (BYTE)*((DWORD*)param);    Parm         = *((DWORD*)param+1);    pRecCall     = (PRECCall)*((DWORD*)param+2);    if (byType == 0)    //窗口    {        pWnd         = (CWnd*)Parm;        dwThreadID   = 0;    }    else if (byType == 1)   //线程    {        pWnd         = NULL;        dwThreadID   = (DWORD)Parm;    }    else    {        pWnd             = NULL;        dwThreadID       = 0;    }}void SubscribeSeriData(void* pWho,BYTE pType){    SerialPort.SubsribeData(pWho,pType);}void UnSubscribeSeriData(void* pWho){    SerialPort.UnSubsribeData(pWho);}



0 0