首页 > 解决方案 > Win32 函数可以异步运行在同一个线程上吗?

问题描述

我想知道win32函数是否可以在同一个线程上异步运行。

我在MSDN中看到了一个异步函数的例子

https://docs.microsoft.com/en-us/windows/win32/wsw/asyncmodelexample

这涉及多线程吗?

编辑:

异步功能只能通过多线程来实现是真的吗?

标签: c++cwindowswinapi

解决方案


我想知道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.


推荐阅读