我正在使用Visual C ++ 2013。 我有两个应用程序(它们在同一台机器上运行):
第一个应用程序从多个客户端接收高质量视频流,同步这些视频并将其写入视频文件(仅限H264,DIVX和MJPG)
第二个应用程序对这些视频中的每组同步帧进行一些处理(使用OpenCV)
然而,由于进/出磁盘的读/写任务非常慢,我在两个进程之间遇到了交换数据。因此,我希望以低延迟直接在RAM上交换数据,并逐帧处理。
我读过 https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574%28v=vs.85%29.aspx 但我不知道处理这件事。
请帮帮我。非常感谢。
答案 0 :(得分:0)
有很多方法可以做到这一点。最简单的一个是通过WM_COPYDATA
:
COPYDATASTRUCT cds;
cds.dwData = 0;
cds.cbData = 5 * sizeof(WCHAR);
cds.lpData = L"Hello";
::SendMessage(hTargetWnd, WM_COPYDATA, (WPARAM)GetSafeHwnd(), (LPARAM)&cds);
您可以通过调用:
轻松找到目标窗口句柄HWND hTargetWnd = ::FindWindow(NULL, L"AppName");
另一种方法基于共享内存。如果你确实使用MFC框架,那么有CSharedFile
类来实现这种类型的IPC。
您也可以使用UDP套接字进行IPC。这里有几个好处:
CAsyncSocket
类。答案 1 :(得分:0)
我猜你有一个框架流,然后你分发给工人应用程序进行处理。我会考虑使用ZeroMQ。原因: