main()和线程()之间的通信
communication between main() and thread()
我有一个有关线程通信的问题。有客户和服务器。
服务器:
- 主要功能 - 其工作是收听某些端口(TCP通信)并从客户端获取命令
- 线程作业是流利地将视频传输到客户端。
客户端:
- 主函数 - 将命令传输到服务器
- 线程 - 观看视频
TCP 视频部分正常工作。在服务器的主要功能之后,从客户端获取命令,我需要将命令发送到视频线程,然后从视频线程发送回服务器的主 - " O.K"。
问题是将命令从服务器的主机发送到视频线程,反之亦然。
足够,命令将是一个变量。
有什么想法吗?谢谢!
管道是两条通信的不良方法,您可以使用共享内存。在共享内存中,两个过程都可以访问可以读取或写入的某些内存,因此在另一个内存中写入或写入,反之亦然。
有关共享存储器的更多详细信息
如果线程和一个变量,则使用原子变量。如果对象,请使用锁定(在视频流循环中进行trylock,然后在主内部锁定写命令)。如果您想要命令为队列,请使用安全的同意队列
我认为您的情况:我会用Boost示例中的两个Wait-free ring buffer
来完成。在一个生产者中制作两个单个生产者-consumer.ins将成为主要功能消费者的另一个线程,反之亦然。(就像在Unix中使用两个管道,但有效)
候补的环形缓冲区提供了一种将对象从一个单个"生产者"线程传递到一个没有任何锁的单个"消费者"线程的机制。此数据结构的操作是"无候补",这意味着每个操作都在恒定的步骤中完成。这使得该数据结构适合在硬实时系统中使用或与中断/信号处理程序进行通信。
无环形缓冲区
但是考虑到我不知道您的情况可能会有更多正确的方法。
相关文章:
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- C++ 两台不同机器之间通过wifi进行套接字通信
- 线程之间的通信不起作用 - C++
- 通过USB在PC和Arduino之间进行串行通信
- 管理器类和对象类之间的通信
- 使用命名管道在 C# 和C++应用程序之间进行持续通信
- Python 3 套接字和 QTcpsocket (c++) 之间的通信失败
- 如何在嵌入式浏览器和Webside之间进行双向通信
- C++程序和未识别程序之间的双向通信
- 使用C++在同一系统上运行的 2 个服务之间进行通信
- C# 和C++应用程序之间的通信
- 如何在Qt WebChannel中以独立于平台的方式在HTML/Javascript和C++之间进行通信?
- 如何在 gtk+ c 中的回调之间进行通信
- Electron应用程序和Win32本机桌面应用程序之间的进程间通信
- 如何在线程之间进行通信和等效的waitforsingleobject()
- C++ 和 Simulink 之间通过 UDP 进行通信
- 在两个Windows QT5之间进行通信
- 覆盆子Pi(QT C )和Arduino(Arduino IDE)之间的通信
- Shell扩展窗口:最好的通信之间的ContextMenu和IconOverlay