c++ - Win32 函数可以异步运行在同一个线程上吗?
问题描述
我想知道win32函数是否可以在同一个线程上异步运行。
我在MSDN中看到了一个异步函数的例子
https://docs.microsoft.com/en-us/windows/win32/wsw/asyncmodelexample
这涉及多线程吗?
编辑:
异步功能只能通过多线程来实现是真的吗?
解决方案
我想知道win32函数是否可以在同一个线程上异步运行。
没有。win32 函数服务于系统调用。它们在自己的上下文中运行(或者,您可以将它们视为系统线程)。它们可能会阻塞您的线程(同步系统调用)或不阻塞您的线程(异步调用)。对于那些同步调用,它看起来像是在你的线程上运行(阻塞),但实际上,它运行在不同的上下文中。
我在 MSDN https://docs.microsoft.com/en-us/windows/win32/wsw/asyncmodelexample中看到了一个异步函数的示例, 这是否涉及多线程?
是的。这个例子实现了多线程(两个线程)。其中一个线程使用异步通知(回调函数)来通知另一个线程的结果。
异步功能只能通过多线程来实现是真的吗?
不会。如前所述,某些系统功能是异步的(或同时具有同步和异步选项)。您可以使用这些函数来执行异步操作。就好像系统为你提供了多线程,而不需要你自己实现一个多线程程序。
Note that the system calls do only system services, a well-defined set of system functions. If you need to achieve something other than just system services in your other thread, then, yes, you need another thread to do it.
推荐阅读
- javascript - 循环平移和旋转画布
- google-apps-script - 需要根据错误和警告拆分行并删除特定内容
- react-native - 更新 blacklist.js 文件
- jquery - 在选择更改时使用 jquery 和 ajax 更新表单数组
- c# - 用epplus从excel中删除多列?
- c# - 在静态方法中使用匿名 Lamba 订阅事件会导致内存泄漏吗?
- python - 如果他们的出现时间超过 300 秒,如何丢弃组?
- php - 如何根据php中给定的日期格式设置
- c++ - openMP:并行运行所有线程会导致内存不足异常
- reactjs - TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须是字符串类型。接收类型未定义