簡単な例の窓共有メモリデモ-----()

---共有メモリを作成するためのプロセスを、およびデータの書き込み、

---次に、6Sをハング

---プロセスBは、共有メモリを開放します

--- Aの書き込みデータは、プロセスを読みます

--- B閉鎖プロセスの共有メモリ

 

 

共有メモリにデータを書き込む処理:

書式#include <iostreamの>
の#include <windows.hに>
する#include <WINNT.H>
書式#include <TCHAR.H>
書式#include <スレッド>

#define SPACENAME _T( "ShareMemory")
の#define MEMERYDATA _T( "我是数据")
の#define BUF_SIZE 4096
HANDLE HMAP = NULL;

ボイドreadMemeryThread(CHAR * STR){

}
int型のmain()
{
  のstd :: COUT << "ProcessAにデータを書き込む準備ができています"。<<はstd ::てendl;

  PszMapName = SPACENAME LPCTSTR;
  CHARデータ[10] = "Iデータ";
  LPTSTR pszData = LPTSTR(データ);
  LPVOID pBuffer = NULL;

  HMAP = :: CreateFileMapping関数(INVALID_HANDLE_VALUE、
                  NULL、
                PAGE_READWRITE、
                0、
                BUF_SIZE、
                pszMapName)。
  IF(HMAP){
   pBuffer = ::のMapViewOfFile(HMAP、FILE_MAP_ALL_ACCESS、0、0、BUF_SIZE)。

    (pBuffer){もし
      strcpy_s((CHAR *)pBuffer、strlenを(データ)+1、データ)。
      std :: coutの<< "写入共享内存数据:" <<(CHAR *)pBuffer <<はstd ::てendl;
    }
    他{
      STD :: COUT << "とwirteマップエラー:" <<のGetLastError()<<はstd :: ENDL。
    }
    スリープ(60000)。
  }
  他{
    STD :: COUT << "とファイルMAPPエラーを作成する:" <<のGetLastError()<<はstd :: ENDL。
  }


  (pBuffer){もし
    UnmapViewOfFile(pBuffer)。
    pBuffer = NULL;
  }
  (HMAP){もし
    CloseHandleを(HMAP)。
    HMAP = NULL;
  }
  システム(「休止」)。
  0を返します。
}

 

 

 

プロセスBは、共有データメモリを読み出します。


書式#include <windows.hに>
する#include <WINNT.H>
書式#include <TCHAR.H>

SPACENAME _Tのに#define( "ShareMemory")
の#define MEMERYDATA _T( "私のデータ")

HANDLE HMAP = NULL;

ボイドreadMemeryThread(CHAR * STR){

}
int型のmain()
{
  のstd :: COUT << "ProcessB日付を読み取る準備ができています"。<<はstd ::てendl;

  PszMapName = SPACENAME LPCTSTR;
  CHARデータ[10] = "Iデータ";
  LPTSTR pszData = LPTSTR(データ);
  LPVOID pBuffer = NULL;


  HMAP = OpenFileMapping(FILE_MAP_ALL_ACCESS、0、pszMapName)。

  IF(HMAP == NULL){
    のstd :: COUT << "オープンマップ誤差を有する:" <<のGetLastError()<<はstd :: ENDL。
  }
  他{
    pBuffer = ::のMapViewOfFile(HMAP、FILE_MAP_ALL_ACCESS、0、0、0);
  (pBuffer){もし
    、strcpy_s((CHAR *)pBuffer、strlenを(データ)+ 1、データ)
    std :: coutの<< "读取共享内存数据:" <<(CHAR *)pBuffer <<はstd ::てendl;
   }
  他{
    STD :: COUT << "と読み出した地図誤り:" <<のGetLastError()<<はstd :: ENDL。
    }
  }

  (pBuffer){もし
    UnmapViewOfFile(pBuffer)。
  }
  (HMAP){もし
    CloseHandleを(HMAP)。
    HMAP = NULL;
  }
  システム(「休止」)。
  0を返します。
}

 

ヒント:簡単な例は、後に改良され、_beginthreadexは、スレッドを作成するために使用する必要があります。最終用途_endthreadex

おすすめ

転載: www.cnblogs.com/liuruoqian/p/12308275.html