2014-01-31 81 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

但考慮到我不知道你的情況有可能在所有