使用std ::螺纹暂停/恢复异步过程
Suspending/Resuming an Async Process with std::thread
让我们假设存在以下类:
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()将执行一小部分每次代码。
您可以在某种程度上使用命令模式来帮助构建作业。
作为旁注,实现suspend
,resume
和wait
的合适机制是条件变量。
相关文章:
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 用C++将哈希表写入文件并从文件中恢复
- Opencv 恢复到比我设置的更高的分辨率
- 变量在使用赋值语句赋值后恢复为以前的值
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 如何在C++中实现带有packaged_task的异步等待循环?
- 创建 Spdlog 异步文件记录器时遇到困难
- 删除所有字符串后如何恢复 QStringList?
- C ++异步键盘输入(标准方式)
- 当对套接字 send() 的同步调用由于连接另一端丢失而被阻止时,如何恢复?
- 在 gtkmm 中异步加载图像
- 如何仅使用一次固定<<设置精度(2)?或者至少恢复到默认行为?
- 带有 Boost.Beast 的异步读取标头
- 如何在 c++ 中异步调用静态方法?
- "co_yield"是否可以在恢复协程时从调用方返回值?
- OpenSSL C API:如何在程序exec()之后恢复TLS连接?
- libcurl :C++处理多个异步请求
- 如何在C++上启动异步线程
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 使用std ::螺纹暂停/恢复异步过程