1

我正在尝试编写一个控制台应用程序,该应用程序可以使用 WinUSB 驱动程序显示和记录从两个 USB 设备传入的两个数据流。

每个数据流由 30 个字符长的文本消息组成,这些消息以 1 毫秒到 200 毫秒之间的随机间隔发送。

解决该问题的最佳一般方法是什么?

我试过以下:

  1. 在单个主线程中轮询每个设备 - 丢失了许多消息。

  2. 使用全局队列,在单独的线程中轮询每个设备,将消息填充到队列中。然后在主线程中出队和处理。使用适当的锁进行排队和出队。经过几秒钟的正常工作后,来自一台设备的所有消息都会停止显示。

这是我用于每个设备的侦听器线程:

static void Listener()
    {
        int currentDevice = 0;
        byte[] incomingDataBuffer = new byte[30];
        bool IsDataReceived = false;
        while (true)
        {
            IsDataReceived = exxDevice.ReadBulk(currentDevice, ref incomingDataBuffer);
            if (IsDataReceived == true)
            {
                AddToQueue(incomingDataBuffer);
            }
            Thread.Sleep(0);
        }
    }

这是主线程循环:

while (true)
        {
            do
            {
                usbEntry = GetFromQueue();
                if (string.IsNullOrEmpty(usbEntry) == false)
                {
                    Console.Write(usbEntry);
                    LogEntry(usbEntry);
                }
            } while (string.IsNullOrEmpty(usbEntry) == false);
            Thread.Sleep(0);
        }
4

0 回答 0