模型中的分叉运行方法。应该优先考虑什么?

时间:2012-11-18 18:58:34

标签: multithreading model-view-controller smalltalk

我正在使用计时器制作一个小游戏的小游戏。每秒出现一个对象,游戏持续10秒。如果我运行一个while循环10秒,我无法从控制器捕获任何输入并在视图中显示它。所以我已经创建了一个新进程,但是如果我按原样分叉,则run方法的优先级太高而其他方法没有机会运行。有一个更好的方法吗?

编辑:

我已经将run方法分配到49,并且控制器和视图工作,但只有当我将鼠标移动到视图上时才会工作。

2 个答案:

答案 0 :(得分:1)

您可以派生进程,但是您希望通过常规窗口事件队列来处理它。尝试这样的事情:

tick
   self doStuff.
   self gameFinished ifFalse: [
      [(Delay forSeconds: 1) wait.
         [self tick] uiEventFor: self builder window] fork]

答案 1 :(得分:0)

恕我直言,分离一个过程并不是解决这个问题的好设计决定。我宁愿创建一个动作队列,在需要执行动作时,您可以在其中放置带有时间戳的动作。然后在游戏主循环的每个循环中,删除所有到期的动作,并处理它们。

E.g。对于每秒产生一个对象,你将在未来添加1秒的动作,并且在处理该动作时,它将在未来再次添加相同的动作1秒。

这将使您的游戏比我们尝试使用并发进程更具可预测性和可调试性。