使用std ::螺纹暂停/恢复异步过程

Suspending/Resuming an Async Process with std::thread

本文关键字:恢复 异步 过程 std 使用 暂停      更新时间:2023-10-16

让我们假设存在以下类:

 
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状态。

这种设计模式是可以接受的,还是我应该使用另一个设计模式来做这样的任务?

我会说这种设计模式是可以接受的,也可以扩展:可伸缩性的方法是将Session的作业分为较小的块,因此RunmyDefaultOperation()将执行一小部分每次代码。

您可以在某种程度上使用命令模式来帮助构建作业。

作为旁注,实现suspendresumewait的合适机制是条件变量。