【问题标题】:Reading input from secondary thread从辅助线程读取输入
【发布时间】:2010-03-09 15:26:20
【问题描述】:

我有一个 XNA 应用程序,我需要将输入队列重定向到自定义线程,而不是让它仅在主线程中可用。有没有 AttachThreadInput 的替代品?

【问题讨论】:

  • 您要查找关于哪个输入设备和平台的信息?键盘/鼠标和 Windows 还是游戏手柄和 Xbox 360?
  • Windows 上的键盘,它是唯一导致问题的...

标签: c# multithreading xna


【解决方案1】:

我对此进行了一些搜索,但我认为您不会找到解决此问题的好方法。这个post 表示如果您“创建一个新的输入类,在我的游戏主线程中注册这些事件,然后启动线程开始轮询”,则可能是可能的。

这两个线程(包括您在 XNA 论坛上开始的那个)的普遍共识向我表明,尝试将键盘输入发送到不同的线程可能不是最好的主意,并且如果可能的话,主要线程应该只处理键盘输入,而另一个线程可以从主线程的共享存储中读取输入。另一种方法是主线程告诉辅助线程根据收到的输入执行某些功能。

Keyboard access from other thread
Keyboard Input on Another Thread

【讨论】:

  • 其中一个线程实际上是我的 (giuseppemag),我希望 SO 的更广泛的观众可能会添加一些东西 :)
【解决方案2】:

我不太确定你在问什么,但我会尽力回答。

如果您尝试创建多人游戏并希望每个玩家的输入由线程处理,您必须执行以下操作:

  • 在主目录中创建与键盘/鼠标/游戏手柄相关的 XNA 对象 你的执行线程 应用程序

  • 通过引用您的自定义输入处理线程来传递对象。

线程与生成它们的进程共享内存,因此从自定义线程内部对对象所做的任何更改都可以通过使用引用的对象在线程外部自动访问。

希望这会有所帮助。

【讨论】:

  • 事实并非如此,我只是在构建一个游戏,其中更新和渲染实际上是独立的循环:更新在另一个线程中完成,而绘图仍然在主线程中。我需要读取更新线程内的输入,以比较相对于更新循环迭代的读数。从主线程同步输入读取会增加如此多的开销,以致完全破坏拥有两个线程的性能提升......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
相关资源
最近更新 更多