2017-07-11 16 views
0

クライアントサーバーアプリケーションに共有メモリを使用しようとしています。私はそれのためのファイルマッピングの概念を使用しています。サーバーはCreateFileMapping APIを使用してファイルマップを作成します。次に、MapViewOfFileとcopymemory apiを使用して共有スペースをコピーします。クライアント/サーバーアプリケーションで共有メモリのイベントを取得する方法

クライアントは、同じファイルマッピングと共有スペースからの読み取りを開きます。 コードは正常に動作していますが、私の要件に応じてサーバーはデータを連続して入れ、クライアントはデータを読み込みます。

whileを以下のコードで使用している場合は助けが必要ですが、CPU使用率は約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; 
} 

答えて

1

は、ここに私のクライアントコードです。

名前付き手動リセットイベント(CreateEvent)とWaitForSingleObjectを使用して、プロセス間のwhileループ内で書き込みと読み取りを同期させることを考えてみましょう。

関連する問題