gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:46:36 27 4
gpt4 key购买 nike

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

最佳答案

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

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

关于c - LabWindows:实现可以处理字符串元素的线程安全队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18277407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com