Advertisement
Guest User

Communication.cpp

a guest
Aug 9th, 2012
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.03 KB | None | 0 0
  1. #include "SharedMemory.hpp"
  2.  
  3. void* pData = NULL;
  4. HANDLE hMapFile = NULL;
  5. std::string SharedMemoryName = "Local\\GLHookMap";
  6.  
  7. GL_EXTERN bool __stdcall CreateSharedMemory()
  8. {
  9.     if ((hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, MapSize, SharedMemoryName.c_str())) == NULL)
  10.     {
  11.         return false;
  12.     }
  13.  
  14.     if ((pData = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, MapSize)) == NULL)
  15.     {
  16.         CloseHandle(hMapFile);
  17.         return false;
  18.     }
  19.     return true;
  20. }
  21.  
  22. GL_EXTERN bool __stdcall OpenSharedMemory()
  23. {
  24.     if ((hMapFile = OpenFileMappingA(FILE_MAP_ALL_ACCESS, false, SharedMemoryName.c_str())) == NULL)
  25.     {
  26.         std::cout<<"\nCould Not Open Shared Memory Map.\n";
  27.         return false;
  28.     }
  29.  
  30.     if ((pData = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, MapSize)) == NULL)
  31.     {
  32.         CloseHandle(hMapFile);
  33.         std::cout<<"\nCould Not Map View Of File.\n";
  34.         return false;
  35.     }
  36.     std::cout<<"\nInter-Process Communication Successful.\n";
  37.     return true;
  38. }
  39.  
  40. GL_EXTERN bool __stdcall UnMapSharedMemory()
  41. {
  42.     if (hMapFile != NULL)
  43.     {
  44.         UnmapViewOfFile(pData);
  45.         CloseHandle(hMapFile);
  46.         return true;
  47.     }
  48.     return false;
  49. }
  50.  
  51. GL_EXTERN bool __stdcall SharedMemoryBusy()
  52. {
  53.     int* Data = static_cast<int*>(pData);
  54.     return Data[1] > 0 ? true : false;
  55. }
  56.  
  57. GL_EXTERN void* __stdcall RequestSharedMemory()
  58. {
  59.     for (int Success = 0; Success < 50; ++Success)
  60.     {
  61.         if (SharedMemoryBusy())
  62.             Sleep(10);
  63.         else
  64.             break;
  65.     }
  66.     return pData;
  67. }
  68.  
  69. GL_EXTERN bool __stdcall SharedMemoryReturned()
  70. {
  71.     int* Data = static_cast<int*>(pData);
  72.     return Data[1] == 2 ? true : false;
  73. }
  74.  
  75. GL_EXTERN bool __stdcall SharedDataFetched()
  76. {
  77.     for (int Success = 0; Success < 50; ++Success)
  78.     {
  79.         if (SharedMemoryReturned())
  80.             return true;
  81.  
  82.         if (!SharedMemoryBusy())
  83.             return false;
  84.  
  85.         Sleep(10);
  86.     }
  87.     return false;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement