LabWindows:实现可以处理字符串元素的线程安全队列

时间:2013-08-16 15:52:09

标签: c multithreading queue labwindows

我有一个Labwindows服务器,用于侦听来自远程计算机上的python客户端的数据。 在Labwindows服务器上,每当触发TCP_DATAREADY事件时,我都会读取缓冲区以从客户端获取数据。此时我需要解析数据并更新UI控件。但是,由于数据经常到达,最好是我可以分配解析数据和更新UI控件的任务到不同的线程,这样服务器就不会丢失来自客户端的任何数据。

我想过在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 个答案:

答案 0 :(得分:1)

执行此类线程间通信的“经典”方法是对receiveBuf进行malloc,在接收数据后将缓冲区指针排队,并立即为下一个数据加载malloc另一个接收缓冲区。您可以在GUI中处理缓冲区指针后释放它们。

这种方法意味着UI和网络线程永远不会在同一个缓冲区上运行,因此可以独立运行。