c# - 为什么电脑游戏会减慢不相关的 COM 端口?
问题描述
问题:
所以我有一个带有按钮和操纵杆的物理设备,我用它来移动鼠标并点击图标等。
为此,我有一个 C# 程序,它读取 COM 端口并使用 InputSimulator 来伪造键盘和鼠标操作。(顺便说一句,这个应用程序是一个有自己窗口的图形应用程序,因为它还在屏幕上显示调试数据。)
这在 Windows 中运行良好,因为我可以使用它在操作系统中导航、打开程序等。我正在输出一个变量“maxTimeBetweenReadings”,它并没有真正超过 20 或 30 毫秒。
但是,我随后打开 Steam 并运行电脑游戏。我的设备起初工作正常,我可以在开始菜单中移动。但是在进入关卡时,来自设备的通讯变得非常不稳定,并且无法玩游戏。我的 maxTimeBetweenReadings 值飙升到一秒多。
我尝试过的事情:
我尝试过使用真正的鼠标和键盘,它仍然非常流畅,所以我知道并不是游戏拖慢了我的整个计算机。
我尝试将我的 C# 程序的优先级设置为实时(尽管我不想在生产中这样做)并将它产生的线程的优先级设置为最高。这没有什么区别,我可以看到。
我已经注释掉了 C# 程序中的所有其他活动(写入/读取文件等),即使我认为这根本不会产生影响。再次没有区别,但后来我不抱希望了。
我的理解是,Windows 已经为我的 C# 程序声明了 COM 端口,现在不会让其他任何东西与之交谈,所以即使游戏出于某种原因想要干扰它,它也不应该能够?
即使游戏能够以某种方式弄乱并中断通信,C#程序以实时优先级运行的事实是否意味着永远不应该给游戏这样做的机会?
但是,我的理解显然存在差距,因为它与我所看到的不一致。
我们需要能够在赠送这款设备的同时保证它可以与任何游戏一起使用,无论所述游戏是如何实现的,无论它试图做什么尴尬的事情。
如果我必须逐场比赛以确保他们不会以某种方式干扰(我仍然不明白他们是如何做到的),那么我将在这里待上一千年。