无法理解异步函数的值,特别是来自库的值
Failing to understand the value of asynchronous functions specially from a library
我正在从库中实现一个异步函数,但现在我怀疑"异步"性质是否有用。这是函数的原型。
bool DoSomething(HANDLE wait)
客户端如何知道工作已经完成?库函数发出传递给它的wait
句柄的信号。现在所有这些都工作得很好,但我想知道客户端应用程序仍然要等待函数来处理/显示结果。这反过来意味着它们应该在次要线程中调用它(您不希望等待主GUI线程)。当异步调用在次要线程中调用时,这难道不是首先静音异步调用的整个目的吗?
我能想到的最接近的事情是windows的ReadFile()
可以异步运行,但然后我们(经常)需要等待它GetOverlappedResult()
。情况是类似的。async函数本身是在一个内部线程(至少我的)中实现的,所以它只增加了一个额外的线程。我没有看到从库提供同步线程的动机?我错过什么了吗?在几乎所有情况下,客户端都希望等待它,那么为什么不在同一个线程中运行呢?
如果你怀疑异步函数是否有用,就不应该使用异步函数。
异步编程有几种模型。这些包括:1. 排队2. 线程3.中断异步编程允许应用程序在等待一件事的同时做另一件事。例如,您的应用程序可以在与用户进行交互的同时不断更新屏幕。
客户端知道工作完成的方式是通过同步方法。可用的同步方法取决于所使用的异步模型。
相关文章:
- C++ 中的 CSV 文件管理(特别是设置标头和每个标头将分别具有的值)
- C++:在进行切片时对迭代器的约定,特别是对于访问最后一个元素并最终将其删除
- OpenCL内核是异步执行的吗
- clang的"-Ofast"选项在实践中有什么作用,特别是对于与gcc的任何差异?
- 如何在程序后台运行函数(特别是自动保存函数)?QT / C++
- 在Cython中损坏的非成员运算符过载(特别是操作员==)
- Qimage :: Pixel函数的10位输出特别是指的是什么
- 查找所有移动构造函数和移动赋值运算符(特别是那些没有"noexcept"的运算符)
- 浮点计算可以用于任何可靠的函数,特别是容器和算法吗?
- 与基本面作斗争.特别是字符[],字符*和从数组中读取.也许我应该使用类型字符串
- 管理迭代器的容器(特别是列表的迭代器的向量)
- 双向链表问题(特别是复制构造函数和删除函数)
- 如何使用 boost 连接映射的键和值,特别是如果值是结构
- Armadillo C :如何使用来自另一个矩阵的多个元素(特别是在立方体结构中)修改矩阵的多个数组元素
- 如何指定 gcc 标志 (CXXFLAGS) 特别是对于特定模块
- 如何在C VS2012中转换或创建.NET V3.5解决方案(特别是工具集)
- const 指令在一般C++中的使用,特别是在 Tiny XML 库中:
- BeautifulSoup的C / CPP版本,特别是在处理格式错误的HTML方面
- 对矢量(vector::operator[]和vector:(size))的只读访问是异步安全的
- 无法理解异步函数的值,特别是来自库的值