c-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不断变化,将指向它的指针保存在队列中也无济于事。我如何在这里实现线程,这样我的线程就可以处理解析功能,而且我只需要担心从主线程中的套接字读取数据?

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

这种方法意味着UI和网络线程从不在同一缓冲区上操作,因此可以独立操作。

相关内容

  • 没有找到相关文章

最新更新