两个进程通过共享内存同步,控制播放器关闭
共享内存一致可像普通内存那样访问,读写,第一次同步失败,是因为析构函数走不到,进程已关闭。
1、返修工具端
HANDLE hShareMapFile = NULL; char* pShareBuf = NULL; /*共享内存通讯*/ int initShareMem(){ hShareMapFile = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUFFER_SIZE, MAP_FILENAME); //INVALID_HANDLE_VALUE表示创建一个进程间共享的对象 if (NULL == hShareMapFile) { _tprintf(TEXT("Could not create file mapping object (%d).\n"), GetLastError()); return -1; } //2. 将文件数据映射到进程的地址空间 pShareBuf = (char*)MapViewOfFile(hShareMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUFFER_SIZE); if (NULL == pShareBuf) { _tprintf(TEXT("Could not map view of file (%d). \n"), GetLastError()); CloseHandle(hShareMapFile); hShareMapFile = NULL; return -1; } //3. 写入到内存中 char *str = "start"; memcpy(pShareBuf, str, strlen(str)+1); return 0; } void writeStr(char* str){ memcpy(pShareBuf, str, strlen(str) + 1); } void releaseShareMem(){ char *str = "myend"; memcpy(pShareBuf, str, strlen(str) + 1); if (pShareBuf!=NULL) UnmapViewOfFile(pShareBuf); if (hShareMapFile != NULL) CloseHandle(hShareMapFile); pShareBuf = NULL; hShareMapFile = NULL; }
2、播放器端,通过轮询 ifMainProsClose来判断dui是否已关闭。
HANDLE hShareMapFile = NULL; char* pShareBuf = NULL; public: int initShareMem() { hShareMapFile = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, MAP_FILENAME); if (NULL == hShareMapFile){ printf(("Could not open file mapping object (%d).\n"), GetLastError()); return -1; } //2. 将文件映射内核对象hFileMapping映射到当前应用程序的进程地址pBuf,通过该指针可以读写共享的内存区域 pShareBuf = (char*)MapViewOfFile(hShareMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUFFER_SIZE); if (NULL == pShareBuf){ printf(("Could not map view of file (%d). \n"), GetLastError()); CloseHandle(hShareMapFile); hShareMapFile = NULL; return -1; } } bool ifMainProsClose() { if (strcmp(pShareBuf, "myend") == 0) return true; else return false; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现