managed_windows_shared_memory_test.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 152 行

CPP
152
字号
////////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga 2004-2007. Distributed under the Boost// Software License, Version 1.0. (See accompanying file// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//// See http://www.boost.org/libs/interprocess for documentation.////////////////////////////////////////////////////////////////////////////////#include <boost/interprocess/detail/config_begin.hpp>#ifdef BOOST_WINDOWS#include <boost/interprocess/allocators/allocator.hpp>#include <boost/interprocess/containers/vector.hpp>#include <boost/interprocess/managed_windows_shared_memory.hpp>#include <cstdio>#include <string>#include "get_process_id_name.hpp"using namespace boost::interprocess;int main (){   const int MemSize          = 65536;   const char *const MemName  = test::get_process_id_name();   //STL compatible allocator object for shared memory   typedef allocator<int, managed_windows_shared_memory::segment_manager>      allocator_int_t;   //A vector that uses that allocator   typedef boost::interprocess::vector<int, allocator_int_t> MyVect;   {      const int max              = 100;      void *array[max];      //Named allocate capable shared memory allocator      managed_windows_shared_memory w_shm(create_only, MemName, MemSize);      int i;      //Let's allocate some memory       for(i = 0; i < max; ++i){         array[i] = w_shm.allocate(i+1);      }      //Deallocate allocated memory      for(i = 0; i < max; ++i){         w_shm.deallocate(array[i]);      }   }   {      //Named allocate capable shared memory managed memory class      managed_windows_shared_memory w_shm(create_only, MemName, MemSize);      //Construct the STL-like allocator with the segment manager      const allocator_int_t myallocator (w_shm.get_segment_manager());      //Construct vector      MyVect *w_shm_vect = w_shm.construct<MyVect> ("MyVector") (myallocator);      //Test that vector can be found via name      if(w_shm_vect != w_shm.find<MyVect>("MyVector").first)         return -1;      //Destroy and check it is not present      w_shm.destroy<MyVect> ("MyVector");      if(0 != w_shm.find<MyVect>("MyVector").first)         return -1;      //Construct a vector in the shared memory      w_shm_vect = w_shm.construct<MyVect> ("MyVector") (myallocator);      {         //Map preexisting segment again in memory         managed_windows_shared_memory w_shm_new(open_only, MemName);         //Check vector is still there         w_shm_vect = w_shm_new.find<MyVect>("MyVector").first;         if(!w_shm_vect)            return -1;         if(w_shm_new.get_size() != w_shm.get_size())            return 1;         {            {               //Map preexisting shmem again in copy-on-write               managed_windows_shared_memory shmem(open_copy_on_write, MemName);               //Check vector is still there               MyVect *shmem_vect = shmem.find<MyVect>("MyVector").first;               if(!shmem_vect)                  return -1;               //Erase vector               shmem.destroy_ptr(shmem_vect);               //Make sure vector is erased               shmem_vect = shmem.find<MyVect>("MyVector").first;               if(shmem_vect)                  return -1;            }            //Now check vector is still in the s            {               //Map preexisting shmem again in copy-on-write               managed_windows_shared_memory shmem(open_copy_on_write, MemName);               //Check vector is still there               MyVect *shmem_vect = shmem.find<MyVect>("MyVector").first;               if(!shmem_vect)                  return -1;            }         }         {            //Map preexisting shmem again in copy-on-write            managed_windows_shared_memory shmem(open_read_only, MemName);            //Check vector is still there            MyVect *shmem_vect = shmem.find<MyVect>("MyVector").first;            if(!shmem_vect)               return -1;         }               //Destroy and check it is not present         w_shm_new.destroy_ptr(w_shm_vect);         if(0 != w_shm_new.find<MyVect>("MyVector").first)            return 1;         //Now test move semantics         managed_windows_shared_memory original(open_only, MemName);         managed_windows_shared_memory move_ctor(detail::move_impl(original));         managed_windows_shared_memory move_assign;         move_assign = detail::move_impl(move_ctor);      }   }   return 0;}#elseint main(){   return 0;}#endif#include <boost/interprocess/detail/config_end.hpp>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?