我正在尝试编写一个控制台应用程序,该应用程序可以使用 WinUSB 驱动程序显示和记录从两个 USB 设备传入的两个数据流。
每个数据流由 30 个字符长的文本消息组成,这些消息以 1 毫秒到 200 毫秒之间的随机间隔发送。
解决该问题的最佳一般方法是什么?
我试过以下:
在单个主线程中轮询每个设备 - 丢失了许多消息。
使用全局队列,在单独的线程中轮询每个设备,将消息填充到队列中。然后在主线程中出队和处理。使用适当的锁进行排队和出队。经过几秒钟的正常工作后,来自一台设备的所有消息都会停止显示。
这是我用于每个设备的侦听器线程:
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);
}