如何在窗口暂停时暂停所有线程

时间:2015-05-23 16:45:51

标签: multithreading task monogame

我注意到在使用Monogame框架时,当游戏停止绘制时线程不会暂停。比如移动窗户。当玩家看不到游戏时,这是一个小问题;使用任务时,这是一个更大的问题。

那么当游戏窗口暂停或没有绘制时,如何暂停所有线程?

1 个答案:

答案 0 :(得分:0)

有人会建议Thread.Suspend。不要使用它,它可以在很难测试的方式打破你的游戏。它可能会暂停System.String或其他重要类的静态ctor。一切都锁定了。这很难测试,所以你很可能会在一个令人惊讶的时间发现它。

暂停线程必须是合作的。一个简单的方法是让所有线程定期等待的事件。如果您想暂停,请取消设置事件:

static readonly AutoResetEvent evt = new ...;
//...
while (...) { //some game loop
 evt.WaitOne();
 DoWork();
}

This has been made into a nice PauseToken class.

如果问题中有一些代码和更多上下文,那么给出一个好答案会更容易。但这应该让你开始合作暂停线程的想法。