C++11中的异步IO
Asynchronous IO in C++11
我需要运行一些迭代算法,我不知道它是否会在合理的时间内收敛到所需的精度。因此,如果我可以在每次迭代后打印残差,并且一旦我感到满意/失去耐心,我可以告诉程序将当前解决方案写入磁盘并终止,那将是很酷的。
通常,为了实现这一点,程序必须在每次迭代后询问是否现在应该终止,大多数时候我不得不告诉它不要终止。这显然很烦人。我不能告诉程序运行,直到我按下某个键,一旦我这样做,它应该完成当前迭代,将近似值写入磁盘并终止吗?
是的,你可以,甚至可以只使用标准的C++11功能。诀窍是生成一个新线程,该线程的唯一工作就是侦听std::cin
。一旦用户写了任何东西,监听线程就会设置一个标志,告诉工作线程中止。在下面的小示例中,我使用这种技术实现了一个"秒表"。
#include <iostream>
#include <thread>
#include <atomic>
int main() {
std::atomic<bool> abort(false);
std::thread t([&abort] () {
std::cout << "Abort?";
std::cin.peek();
abort = true;
});
unsigned long i = 0;
while (!abort) ++i;
t.join();
std::cout << "Counted to " << i << std::endl;
return 0;
}
您现在可以尝试在程序达到100000000时终止程序。:-)
相关文章:
- Seg Fault Issue C++ (file IO / getline)
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 为什么在读取文件大小时文件IO速度会发生变化
- Agora.io 虚幻引擎插件构建错误
- 如何在C++中实现带有packaged_task的异步等待循环?
- 创建 Spdlog 异步文件记录器时遇到困难
- C ++异步键盘输入(标准方式)
- 不将数据 socket.io c++(客户端)发送到 nodejs(服务器)socket.io
- ASIO signal_set多个 IO 线程不可靠,具体取决于代码顺序?
- C++中真正的异步文件 IO
- 为什么在读取非HTTP服务器的套接字时需要异步IO
- 未收到C++Windows异步IO命名管道的第一条消息
- 处理一个套接字和多个线程时异步 IO 的用例
- C++11中的异步IO
- 子进程的异步双向IO重定向
- 由于在C++中使用了异步IO,因此在不休眠的情况下延迟程序的其他方法
- Linux异步IO与libaio性能问题
- c++的非线程异步IO简介
- 为什么首选异步IO