【问题标题】:LabWindows: implementing thread safe queues that can handle string elementsLabWindows:实现可以处理字符串元素的线程安全队列
【发布时间】:2013-08-19 02:26:24
【问题描述】:

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

【问题讨论】:

    标签: c multithreading queue labwindows


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢。这很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2010-10-22
    • 2013-07-24
    • 2010-12-10
    • 2012-11-20
    相关资源
    最近更新 更多