【发布时间】:2012-08-06 01:02:03
【问题描述】:
我在 VS2010 中使用 C# 中的 VB .NET 4 创建了一个游戏。游戏为每个玩家创建一个线程,并运行玩家创建的 LUA 代码。
每个 LUA 代码都为线程阻塞,并且只应在线程终止时终止(LUA 脚本应包含无限循环)
我想限制 CPU 使用率,因为计算机在以 100% CPU 运行几个小时后当前过热。
如何在不控制线程的情况下限制线程?我希望有一个线程管理器来强制挂起/恢复,但这些已经过时了,我不想抛出异常,因为这会中止我正在执行的 LUA 代码。
有什么想法吗?
谢谢!
【问题讨论】:
-
你能让你的 C-Sharp 代码调用一个本质上是你的主循环的方法吗?我不确定 LUA 是否具有高分辨率计时器(我假设您正在将其用于您的游戏逻辑),但 C-Sharp 肯定有,因此您在 LUA 中的主要方法可能会接受帧之间的增量而不是自己计算。
-
目前的工作方式是所有游戏逻辑都在 C-Sharp 中完成。 LUA 线程能够通过同样可以在 LUA 中调用的 .NET 函数(一种函数映射)来获取有关游戏的信息,并将控制信息返回给游戏。我不确定我是否理解您的问题,这有帮助吗?
-
我的印象是 LUA 将完成大部分游戏逻辑。如果 C-Sharp 执行逻辑,LUA 会添加什么?
-
将 LUA 视为玩家的控制器。游戏继续进行,玩家提交的 LUA 代码将观察和控制他们在游戏中关联的玩家。
-
对我来说,我会尝试将所有逻辑集中在一个地方(语言),这样您就不必担心同步和编组数据。
标签: c# multithreading visual-studio-2010 throttling