9 Ocak 2018 Salı

interprocess mapped_region Sınıfı

Giriş
Şu satırları dahil ederiz.
#include <boost/interprocess/mapped_region.hpp>
#include <boost/interprocess/shared_memory_object.hpp>
Bu nesne yok olunca uygulamaya dahil edilen shared memory alanına erişimimiz de yok olur. Dolayısıyla bu nesne genellikle global bir şekilde veya yok olmayacak bir üye alan olarak tutulur.

Constructor
shared_memory_object verilir. Şöyle yaparız
bip::shared_memory_object sharedObj = ...;
...
bip::mapped_region mappedObj (sharedObj,bip::read_write);
get_address metodu
Örnek
Şöyle yaparız.
int const* p = reinterpret_cast<int const*>(reg.get_address());
Örnek
Elimizde şöyle bir yapı olsun.
struct SharedData {
  bip::interprocess_semaphore sem;
  int data;
  bool newData;
  SharedData() : sem(1), newData(false) {}
};
Şöyle yaparız
SharedData* sd = (SharedData*)mappedObj.get_address();
Şöyle yaparız.
auto sd = static_cast<SharedData *>(mappedObj.get_address());
Bu bellekte bir nesne yaratmak istersek şöyle yaparız.
SharedData *sd  = new (mappedObj.get_address()) SharedData;
get_size metodu
Şöyle yaparız.
bi::shared_memory_object shm(bi::open_only, SHM_NAME, bi::read_only);
bi::mapped_region reg(shm, bi::read_only, 0);

size_t N = reg.get_size();

Hiç yorum yok:

Yorum Gönder