gpt4 book ai didi

c++ - 如何在客户端-服务器应用程序中获取共享内存中的事件

转载 作者:行者123 更新时间:2023-11-28 05:05:02 25 4
gpt4 key购买 nike

我正在尝试为我的客户端服务器应用程序使用共享内存。我正在为此使用文件映射概念。服务器将使用 CreateFileMapping API 创建文件映射。然后它将使用 MapViewOfFile 和 copymemory api 来复制共享空间。

客户端将打开相同的文件映射并从共享空间读取。代码运行良好,但根据我的要求,服务器将连续放置数据,客户端将读取数据。

如果我根据下面的代码使用 while,我需要帮助,但它占用了大约 90% 的巨大 CPU 周期。

这是我的客户端代码:

while (1)
{
pBuf = (WCHAR *)MapViewOfFile(hMapFile, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
1024);

if (pBuf == NULL)
{
printf("Could not map view of file (%d) \n", GetLastError());

//CloseHandle(hMapFile);

getchar();

return 1;
}
if (wcslen(pBuffCheck) == 0)
{
wcscpy(pBuffCheck, pBuf);
//printf("\n File From the Server Found %ls", pBuffCheck);
}
else
{
if (wcscmp(pBuf, pBuffCheck) != 0)
{
wcscpy(pBuffCheck, pBuf);
printf("\n File Path %ls", pBuffCheck);
}
}

UnmapViewOfFile(pBuf);
//CloseHandle(hMapFile);
pBuf = NULL;
}

最佳答案

您需要在服务器和客户端之间同步写入和读取操作,而不是将 CPU 时间浪费在不需要的读取上。

考虑使用命名手动重置事件 (CreateEvent) 和 WaitForSingleObject 在 while 循环内跨进程写入和读取之间进行同步。

关于c++ - 如何在客户端-服务器应用程序中获取共享内存中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45027724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com