如何在客户端-服务器应用程序中获取共享内存中的事件
How to get events in shared memory in client-server application
我正在尝试为我的客户端服务器应用程序使用共享内存。我正在为此使用文件映射概念。服务器将使用 CreateFileMapping API 创建文件映射。然后它将使用 MapViewOfFile
和 copymemory api 复制共享 space.
客户端将打开相同的文件映射并从共享 space 中读取。
代码运行良好,但根据我的要求,服务器将连续放置数据,客户端将读取数据。
如果我按照下面的代码使用 while
,我需要帮助,但它需要一个巨大的 CPU 周期,大约 90%。
这是我的客户端代码:
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 循环内跨进程写入和读取之间进行同步。
我正在尝试为我的客户端服务器应用程序使用共享内存。我正在为此使用文件映射概念。服务器将使用 CreateFileMapping API 创建文件映射。然后它将使用 MapViewOfFile
和 copymemory api 复制共享 space.
客户端将打开相同的文件映射并从共享 space 中读取。 代码运行良好,但根据我的要求,服务器将连续放置数据,客户端将读取数据。
如果我按照下面的代码使用 while
,我需要帮助,但它需要一个巨大的 CPU 周期,大约 90%。
这是我的客户端代码:
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 循环内跨进程写入和读取之间进行同步。