多界面程序中,通信数据直达各个界面的方法
2015-03-31 16:37
176 查看
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); }
相关文章推荐
- 串口数据通信程序实现(SerialPort类方法)
- MFC程序嵌入子进程界面的通信方法及消息同步
- android Bluetooth 开发3之数据通信界面
- VB程序非正常关闭后—编译错误,未找到方法或数据成员
- 微信小程序--页面之间相互传递数据方法
- C语言和java通过socket通信,数据出现不一致的解决方法
- 微信小程序5 - 数据驱动界面
- 通信数据转发程序
- 关于多数据方法程序优化思路
- 微信小程序数据请求方法wx.request
- 针对不同类型数据的ajax通信方法总结
- 开发中前后端数据通信,前后端联调方法
- MIT-BIH ECG 信号的数据读取方法和Matlab程序
- 织梦DEDECMS会员发布文章修改后"数据校验不对,程序返回"错误修改方法
- 【Android】FragmentPagerAdapter数据刷新notifyDataSetChanged没效果研究或不执行OnCreatView方法导致界面不刷新
- React数据传递之组件内部通信的方法
- 在小程序中修改上一个页面里data中的数据调用上一个页面的方法
- Java使用HTTP的get方法读取网络数据、使用post方法与网络交互通信
- 微信小程序之传递数据(两种方法)
- 数值分析(拟合、插值和逼近)之数据插值方法(线性插值、二次插值、Cubic插值、埃米尔特、拉格朗日多项式插值、牛顿插值、样条插值)(含opengl程序)