【发布时间】:2017-03-11 00:57:44
【问题描述】:
让我们假设存在以下类:
class MySession {
public:
run(); // can only be invoked once, starts a child _run() process as an async process
suspend();
resume();
private:
// basic implementation
run_() {
while(condition) {
runMyDefaultOperation();
// either waits for interval, or if suspended, waits until resume is called
waitFor(interval);
}
}
};
这工作得很好,但它在可扩展性方面受到限制。这种实现限制了我在“块”中暂停。为了解决这个问题,我需要检查is_suspended 状态以获取任意更小的代码块。
这种设计模式是否可以接受,或者我应该使用另一种设计模式来代替这样的任务?
【问题讨论】:
-
检查
game loop模式,它主要适用于游戏和其他实时应用程序。逻辑是,为了避免在不同硬件上的不同体验,计算先前操作(在游戏上渲染一帧)的处理时间,如果计算机太快,这意味着它会非常快地处理它,因此将其暂停一段时间,如果硬件项目按时完成,则无需任何等待即可通过,因此无论硬件功率如何,它们都会对齐 -
纺纱,即使等待,通常也是一个坏主意。不总是。您正在执行的此类操作的最佳模式最终对您正在做的事情敏感 - 您正在“旋转”什么。你已经抽象出了关于你正在“旋转”的所有细节。这使得回答你的问题成为一种读心术。现在,人们在读心方面出奇地好,但这仍然是在浪费人们回答你问题的时间。
-
我在内部所做的实际上与我的情况无关。调用不受
MySession拥有的任何数据影响的函数。我确实离开了间隔,这将是 1-10 分钟以上。 -
Yakk:问题中没有明确的旋转,条件变量会起作用,请参阅我的答案。
标签: c++ multithreading c++11 c++14