草庐IT

interprocess

全部标签

c++ - std::vector 是否满足 Boost.Interprocess 分配器的容器要求?

在boost::interprocess文档中,它被认为是容器存储在共享内存中的要求:STL容器可能不会假设用分配器分配的内存可以用相同类型的其他分配器释放。仅当分配给一个对象的内存可以与另一个分配时,所有分配器对象必须比较相等,并且这只能在运行时使用operator==()进行测试。容器的内部指针应该是allocator::pointer类型,并且容器不能假定allocator::pointer是原始指针。所有对象都必须通过allocator::construct和allocator::destroy函数构造-销毁。我正在使用带有-std=c++11(和boost1.53)的gcc4

c++ - 当其他进程可能正在使用它时删除 boost interprocess_mutex

我正在尝试将interprocess_mutex与managed_windows_shared_memory一起使用。在我的项目中,多个进程在以下代码中创建了一个classA的实例。usingnamespaceboost::interprocess;classA{managed_windows_shared_memory*_shm;interprocess_mutex*_mtx;}A::A(){_shm=newmanaged_windows_shared_memory{open_or_create,"shm",1024};_mtx=_shm->find_or_construct("mt

c++ - 共享内存中的 boost::lockfree::queue 出现问题(boost 1.53、gcc 4.7.2/clang 3.0-6ubuntu3)

我在放置boost::lockfree::queue,..>时遇到问题在共享内存中。我需要它,因为我必须能够将超过65535条消息插入队列,而fixed_sized队列限制为65535。以下代码工作正常(但capacity选项暗示fixed_sized):typedefboost::interprocess::allocatorShmemAllocator;typedefboost::lockfree::queue,boost::lockfree::allocator>Queue;m_segment=newboost::interprocess::managed_shared_memo

c# - 在 Windows 中使用命名管道 (C++/C#)

我有一个C++应用程序需要将图像从网络摄像头实时发送到同一台PC上的C#应用程序。无法从C#代码调用C++代码,因此我需要通过命名管道实现通信以发送图像。我以前从未做过任何通信编程,我想知道如何解决这个问题。我的第一个想法是让C++应用程序在单独的线程上创建命名管道服务器,创建后线程将持续等待,直到可以发送图像。届时它将发送图像。同样,C#应用程序将创建一个充当客户端的新线程。它会连接到服务器并不断循环,直到有图像可用。届时它将接收图像并将其存储在主线程可以访问的队列中。这有意义吗?这是最好的方法吗? 最佳答案 我支持在这里使用CO

c++ - boost::interprocess 互斥量并检查是否被遗弃

我需要围绕一个硬件进行进程间同步。因为此代码需要在Windows和Linux上运行,所以我使用Boost进程间互斥锁进行封装。一切正常接受我检查互斥量放弃的方法。这有可能发生,所以我必须为此做好准备。我在测试中放弃了互斥锁,果然,当我使用scoped_lock锁定互斥锁时,进程会无限期地阻塞。我认为解决这个问题的方法是在scoped_lock上使用超时机制(因为花很多时间在谷歌上搜索解决这个问题的方法并没有真正显示太多,出于可移植性的原因,boost并没有做太多事情)。事不宜迟,这就是我所拥有的:#include#includetypedefboost::interprocess::n

tcp - 哪种方法更适合在两个进程、本地 TCP/IP 连接或进程间通信之间发送图像流?

假设我必须复制流中的每个图像(我不能简单地访问具有任何互斥保护的数据,无论如何都必须复制),哪种方法更好,优缺点?我还想知道与在同一过程中使用图像相比,这意味着多少性能损失。谢谢 最佳答案 对于图像,IPC通过sharedmemory将是最佳选择。 关于tcp-哪种方法更适合在两个进程、本地TCP/IP连接或进程间通信之间发送图像流?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions

C++ 应用程序 : Is it possible to pass accepted TCP connection from one process to another?

所以我想知道-是否可以将已接受的TCP连接(在Windows或类似Unix的操作系统上)从一个进程传递到另一个进程?这里的重点是传递连接-而不是以代理应用程序的方式传递数据。 最佳答案 在Unix中,TCP连接表示为套接字文件描述符。当您fork一个进程时,文件描述符由子进程继承,包括TCP套接字。(虽然它们可能会在exec上关闭,如果给定带有fcntl的FD_CLOEXEC标志。)也可以使用本地(Unix)域套接字在不相关的进程之间传输文件描述符;见thisquestion.我不确定Windows。

Java TCP/IP 套接字延迟 - 停留在 50 μs(微秒)? (用于 Java IPC)

我们一直在分析和分析我们的应用程序,以尽可能减少延迟。我们的应用程序由3个独立的Java进程组成,它们都在同一台服务器上运行,它们通过TCP/IP套接字相互传递消息。我们已将第一个组件的处理时间减少到25微秒,但我们发现TCP/IP套接字写入(在本地主机上)到下一个组件总是需要大约50微秒。我们看到了另一种异常行为,因为接受连接的组件可以更快地写入(即不是TCP/IP专家,我不知道可以做些什么来加快速度。Unix域套接字会更快吗?内存映射文件?还有哪些其他机制可能是将数据从一个Java进程传递到另一个进程的更快方法?2011年6月21日更新我们创建了2个基准应用程序,一个用Java,一

linux - 通过管道进行进程间通信

众所周知,在Linux的进程间通信中,进程之间通过一个名为“管道”的特殊文件进行通信。众所周知,对该文件执行的操作由一个进程写入并由一个进程读取以便相互通信。现在,问题是:Doesthesewriteandreadoperationsareparallelperformedduringthecommunication(operationsareexecutedparallely)?如果不是,当其中一个进程在通信过程中进入SLEEP状态时会发生什么?是先执行write操作让第二个进程read还是不执行任何write和直接进入休眠读取操作? 最佳答案

linux - 通过管道进行进程间通信

众所周知,在Linux的进程间通信中,进程之间通过一个名为“管道”的特殊文件进行通信。众所周知,对该文件执行的操作由一个进程写入并由一个进程读取以便相互通信。现在,问题是:Doesthesewriteandreadoperationsareparallelperformedduringthecommunication(operationsareexecutedparallely)?如果不是,当其中一个进程在通信过程中进入SLEEP状态时会发生什么?是先执行write操作让第二个进程read还是不执行任何write和直接进入休眠读取操作? 最佳答案