2013-08-16 92 views
0

我有一臺Labwindows服務器,用於偵聽遠程計算機上的python客戶端的數據。 在Labwindows服務器上,無論何時觸發TCP_DATAREADY事件,我都會讀取緩衝區以從客戶端獲取數據。此時我需要解析數據並更新UI控件。但是,由於數據經常到達,所以最好分配解析數據和更新UI控件到不同線程的任務,這樣服務器不會丟失客戶端的任何數據。LabWindows:實現可處理字符串元素的線程安全隊列

我曾想過在Labwindows中使用線程安全隊列。但是,我從客戶端獲得的數據是一個字符串。我如何構建一個包含字符串元素的隊列?我不能使用指針,因爲每次數據到達時都會更新從客戶端接收到的數據。

下面是一段代碼,從套接字讀取數據:

case TCP_DATAREADY: 
      if ((dataSize = ServerTCPRead (g_hconversation, receiveBuf, 
              dataSize, 1000)) 
       < 0) 
       { 
       SetCtrlVal(g_hconversation, MAINPNL_TEXTBOX,"Receive Error"); 
     } 
      else 
       { 
     //receiveBuff should be passed to function that decides where to display it 
     display_value_from_client(receiveBuf); 

       } 

所以,receiveBuf是不斷變化的,並在隊列不會幫助節省指向它。 如何在這裏實現線程,以便我的線程處理解析功能,我只需要擔心從主線程中的套接字讀取數據?

回答

1

執行此類線程間通信的'經典'方式是malloc receiveBuf,在收到數據後將緩衝區指針排隊,並立即malloc另一個接收下一個數據負載的緩衝區。在GUI中處理它們之後,您可以釋放緩衝區指針。

這種方法意味着UI和網絡線程從不在相同的緩衝區上運行,因此可以獨立運行。

+0

非常感謝。這非常有幫助。 –