2014-01-31 40 views
2

我有一个关于线程通信的问题。有 有客户端和服务器。main()和thread()之间的通信

服务器:

  1. 主要功能 - 它的工作是听一些端口(TCP通信),并从客户端
  2. 线程的工作就是流畅的视频传输到客户端获取命令。

客户端:

  1. 主要功能 - 发送命令到服务器
  2. thread-观看视频

的TCP \视频部分工作正常。 服务器的主要功能之后,从客户端获得了命令,我需要将命令发送到视频线程并从视频线程发送回服务器的主“o.k”。

问题是将命令从服务器的主要发送到视频线程,反之亦然。

其足够的命令将是一个变量..

什么想法? 谢谢!

+0

更合适的ways.Maybe redesining尝试'人2 pipe' –

+0

'服务器的主,到视频线服务器或客户端的'---'视频线程'? –

+0

服务器的视频线程到服务器的主线程。 – user1673206

回答

1

管道是双向通信的不好方法,您可以使用共享内存。 在共享内存中,这两个进程都可以访问某些可用于读取或写入的内存,这样一个内部的写入在另一个内的读取中可见,反之亦然。

用于在共享存储器http://www.cs.cf.ac.uk/Dave/C/node27.html

+1

它们是一个进程中的线程,而不是不同的进程 - 内存已被定义共享。 –

+0

客户端和服务器如何成为同一进程的子进程,如果这样的话,乳清可以使用全局变量。那么没有时间应该浪费在共享内存中,但具有相同父代的客户端和服务器是不太好的设计,我猜...我不知道... –

0

如果线程和一个可变然后使用原子变量的更多细节。如果对象然后使用锁定(trylock里面的视频流循环和锁定写命令在主内)。如果你想要命令作为队列编辑然后使用安全联盟队列

我认为你的情况: 我会做两个Wait-free ring buffer从增强示例。制造两个单一的生产者 - 消费者。一个生产者将主要功能消费者其他线程,反之亦然。 (就像在unix中使用两个管道但效率很高)

一个等待空闲的环形缓冲区提供了一种机制,用于将对象从一个“生产者”线程中继到单个“使用者”线程,而无需任何锁定。这个数据结构上的操作是“无等待”的,这意味着每个操作都在一个固定的步数内完成。这使得该数据结构适合用于硬实时系统或与中断/信号处理程序进行通信。

Wait-free ring buffer

但考虑到我不知道你的情况有可能在所有