内存映射实现进程间通信
来源:互联网 发布:彩虹岛网络传输异常 编辑:程序博客网 时间:2024/06/07 13:03
示例通过内存映射实现从服务器加载bmp位图到内存,客户端从内存读取并显示。
//服务器部分代码void CServerDlg::OnCreateFileMap() {// TODO: Add your control notification handler code hereCButton* pButton = (CButton*)GetDlgItem(IDC_BUTTON1);pButton->EnableWindow(false);CString filename = _T("image\\3.bmp");//1.加载文件m_hFile = CreateFile(filename,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if (m_hFile == INVALID_HANDLE_VALUE){MessageBox(_T("文件加载失败!!!"),NULL,MB_OK);return;}m_hMap = CreateFileMapping(m_hFile, NULL, PAGE_READONLY, NULL, NULL, _T("myjpg"));//2.映射整个文件到m_pBaseMapFile = MapViewOfFile(m_hMap,FILE_MAP_READ,0,0,0);}void CServerDlg::OnCloseFileMap() {// TODO: Add your control notification handler code hereCButton* pButton = (CButton*)GetDlgItem(IDC_BUTTON2);pButton->EnableWindow(false);if (m_pBaseMapFile){UnmapViewOfFile(m_pBaseMapFile);}if (m_hMap){CloseHandle(m_hMap);}if (m_hFile){CloseHandle(m_hFile);}}
//客户端部分代码void CClientView::OnOpenFileMap() {// TODO: Add your command handler code herem_hMapFile =OpenFileMapping(FILE_MAP_READ, FALSE,_T("myjpg"));if(m_hMapFile == NULL){MessageBox(_T("文件映射打开失败!"));return;}m_pBaseMapFile=MapViewOfFile(m_hMapFile, FILE_MAP_READ, 0,0,0);SetBitsToBmp((BYTE*)m_pBaseMapFile);}void CClientView::OnCloseFileMap() {// TODO: Add your command handler code hereif (m_pBaseMapFile) { UnmapViewOfFile(m_pBaseMapFile); }if(m_hMapFile){CloseHandle(m_hMapFile);}}void CClientView::SetBitsToBmp(LPBYTE lpBase){BITMAPFILEHEADER *pFileHeader; // bitmap file-headerBITMAPINFO *pInfoHeader; // bitmap info-headerpFileHeader = (BITMAPFILEHEADER*)lpBase;if(pFileHeader->bfType != MAKEWORD('B', 'M')){ MessageBox(_T("本程序仅读取BMP 文件!"));::UnmapViewOfFile(lpBase);::CloseHandle(m_hMapFile);return;}BYTE *pBits = (BYTE*)lpBase + pFileHeader->bfOffBits;pInfoHeader = (BITMAPINFO*)((BYTE*)lpBase + sizeof(BITMAPFILEHEADER));m_nHeight = pInfoHeader->bmiHeader.biHeight;m_nWidth = pInfoHeader->bmiHeader.biWidth;CClientDC dc(this);// 创建一个与指定DC 兼容的未初始化的位图,选入到内存兼容DC 中m_hMemDC = CreateCompatibleDC(dc);HBITMAP hBitmap = ::CreateCompatibleBitmap(dc, m_nWidth, m_nHeight);::SelectObject(m_hMemDC, hBitmap);//1.正常显示SetDIBitsToDevice(m_hMemDC,0, 0, m_nWidth,m_nHeight,0, 0,0, m_nHeight, pBits, pInfoHeader,DIB_RGB_COLORS); //2.缩放模式/*RECT rc;GetClientRect(&rc);int nWidth = rc.right - rc.left;int nHeight = rc.bottom - rc.top;StretchDIBits(m_hMemDC, 0, 0, nWidth, nHeight, 0, 0, m_nWidth, m_nHeight, pBits, pInfoHeader,DIB_RGB_COLORS,SRCCOPY);*/InvalidateRect(NULL, TRUE);::DeleteObject(hBitmap);}
void CClientView::OnDraw(CDC* pDC){CClientDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereBitBlt(pDC->m_hDC,0, 0, m_nWidth, m_nHeight, m_hMemDC,0,0,SRCCOPY);}
- 通过内存映射实现进程间通信
- 利用内存映射实现进程间通信
- 内存映射实现进程间通信
- Java NIO 内存映射文件实现进程间通信
- java nio 使用内存映射文件实现进程间通信
- 用内存映射文件实现进程间通信
- Java NIO 内存映射文件实现进程间通信
- 内存映射文件实现多进程通信
- 内存映射文件实现多进程通信
- 内存文件映射 进程间通信
- 内存文件映射-进程间通信
- 进程间通信 - 内存映射文件
- 内存文件映射-进程间通信
- 进程间通信——内存映射
- Linux进程间通信--内存映射
- linux 进程间通信-内存映射
- 总结:内存映射文件与内存读写实现进程间通信的比较
- Java NIO 应用 -- 使用内存映射文件实现进程间通信
- rcp(插件开发)资源管理三
- 删除一个字符串中的数字(C语言)
- rcp(插件开发)资源管理四
- 【模拟】nba
- cuda第0课环境配置+建立第一个程序:cuda4.2+VS2010+GeForce8500GT
- 内存映射实现进程间通信
- Vijos P1033 家族
- java面试题汇总 java面试题集合 - 网络收集
- Java获取IP地址:request.getRemoteAddr()警惕
- dropdownlist禁用某项
- Bootstrap资源收集
- WEB ADI 修改列标题和增加LOV的SQL语句
- 坐标动态规划(tyvj p1124 花店橱窗)
- 欧拉回路