Thanks Ion. I have tried the following sample, I see one issue that "find"
is failing in the following sample.
#include
#include
#include
#include
#include
#include
#include
#include <iostream>
// Define your types
using timer_id_t = int;
struct timer_instance_t {
int id; // Example member
};
// Define allocators for shared memory
typedef boost::interprocess::allocator TimerAllocator;
typedef boost::interprocess::allocator,
boost::interprocess::managed_shared_memory::segment_manager> MapAllocator;
// Define the unordered_map type
typedef boost::unordered_map, std::less, MapAllocator>
timer_instance_map_t;
int main() {
using namespace boost::interprocess;
// Create managed shared memory
managed_shared_memory segment(open_or_create, "MySharedMemory", 65536);
// Construct the unordered map in shared memory
timer_instance_map_t* timer_instance_map =
segment.find_or_construct("TimerInstanceMap")(10,
std::hash(), std::less(),
segment.get_segment_manager());
// Allocate a timer_instance_t in shared memory
timer_instance_t* instance =
segment.construct("TimerInstance")();
// Use emplace to insert the timer_instance_t pointer into the map
timer_id_t id = 100;
timer_instance_map->emplace(id, *instance); // Copy the allocated
instance into the map
// Accessing the instance
auto it = timer_instance_map->find(id);
if (it != timer_instance_map->end()) {
std::cout << "Found timer instance with id: " << it->second.id <<
std::endl;
} else {
std::cout << "Timer instance not found." << std::endl;
}
for (const auto& pair : *timer_instance_map) {
std::cout <<"Timer Id: " << pair.first <<", Timer Instance Id: " <<
pair.second.id<< std::endl;
}
// Cleanup: You may want to remove the shared memory segment
shared_memory_object::remove("MySharedMemory");
return 0;
}
output:
Timer Instance not found.
Timer Id: 100, Timer Instance Id: 0
need help in understanding why find is failing.
Regards,
Murali Kishore
On Mon, Sep 9, 2024 at 8:42 PM Ion Gaztañaga wrote:
El 09/09/2024 a las 15:18, Murali Kishore via Boost escribió:
Hi all,
I see multiset is not present in boost interprocess, so I tried to use a
"set" with a customized comparator to achieve multiset functionality.
You can use any Boost.Container container with Boost.Interprocess,
including multiset.
Boost.Interprocess own container aliases will be deprecated soon, since
they only forward to Boost.Container. I'll maintain those container
header inside Interprocess for backwards compatibility for several Boost
releases but in the end they will be removed.
Best,
Ion
--
Regards,
Murali Kishore