C 共享_ptr和直接缓冲区入住.如何
C++ shared_ptr and direct buffer enqueueing. How?
我需要在多线程应用程序中进行小型代码重构我排队/排出操作。当前实施是:
-
使用参数来调用:
enqueue(obj_ptr item)
其中 obj_ptr 是使用 sharone_ptr 创建的类 obj 的指针。然后,给定的项目(类型obj_ptr)在std列表中征集
list<obj_ptr>
并简单地使用front()和pop_front()脱水,然后发送。在此实施中一切都很好。
-
我想做的是:
使用其API进入特殊列表中的此项目:
a_enqueue(void *buffer)
所以我需要直接地址到缓冲区。
我正在考虑使用:
item->get()
哪个返回类型 obj ,但是我只能脱离 obj ,而不是 obj_ptr ,它预计将在脱水后接下来操作( 我会有关类参考的宽松信息,它将破坏多线程应用程序)
我正在考虑提供列出指向 obj_ref项目的指针:
a_enqueue(&item)
但是 item 很久以前就在某些功能中创建,并多次将参数(不是指针)放置,并且无法找到对其的直接地址。
对我来说,最好的方法是进入buffer obj (item-> get()),然后删除并以某种方式找到我在get中使用的相同参考 obj_ptr item ()。是否可以?还有其他想法吗?
谢谢。
编辑:Dequeue Call是:
a_dequeue(void **buffer)
API Dequeue是什么样的?
通常,如果您要招募void *
,则您也可以定义处理程序功能,以便您可以执行类似的操作...
void enqueue_ptr (obj_ptr enqueue_me)
{
// Making a copy on the heap increments the ptr count
obj_ptr * heap_ptr = new obj_ptr(enqueue_me);
a_enqueue (heap_ptr);
}
obj_ptr dequeue_ptr (void)
{
// You might need casting to change void * to obj_ptr *
obj_ptr * heap_ptr;
a_dequeue (&heap_ptr);
// Sticking the copy in an auto_ptr decrements the ptr count when we leave scope.
std::auto_ptr<obj_ptr> obj_pptr(heap_ptr);
return *obj_pptr;
}
基本上,您将OBJ_PTR视为与其他任何其他对象相同的void *。
相关文章:
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- istream std::cin如何修改自定义istream缓冲区
- 如何使用字符串find_first_of缓冲区形式(size_t n 参数)
- 如何使用带有矢量的 winapi 读取进程内存从另一个进程读取缓冲区?
- 如何使用 boost 将流放入缓冲区
- 串行端口写入究竟如何从缓冲区实际写入数据?
- 如何使用ZeroMQ为协议缓冲区编写自己的RPC实现
- 如何避免将数据缓冲区的额外副本复制到字符串?
- 如何从内存缓冲区加载张量流图
- libQGLViewer 如何在没有清除缓冲区的情况下绘制
- OpenGL 更新缓冲区如何影响速度
- 如何分配适合容纳 T 类型对象的缓冲区(可能过度对齐、可能有运算符 new 等)
- 如何将文件的一部分读取到std::list缓冲区?
- C++使用libarchive和archive_write_open_memory..如何清除缓冲区
- 字符串缓冲区如何导致运行恶意代码
- 纯虚拟成员函数必须处理模板化的缓冲区-如何处理
- 模板化的生产者-消费者BlockingQueue,无界缓冲区:如何优雅地结束
- 将内存写入文件缓冲区如何使其发生变化?
- 协议缓冲区:如何将多条消息序列化和反序列化为一个文件 (C++)
- 协议缓冲区 - 如何使用 ProtoBuf 扩展在 C++ 中获取多态性