c++ - C++ 中有没有办法实现适用于多级函数调用的协程?
问题描述
我希望在 C++ 中实现一种方法,以便能够在函数中途停止函数内的执行并返回一些函数调用。例如,我可能有一个函数 F,并且我希望此代码一直返回到 F,而不必在 F 中包含任何特殊代码或函数 F 调用,而不是执行此返回的函数。然后,我希望能够在某个时候执行一段代码,恢复原始位置内的所有执行。我想这可以通过堆栈操作来完成,但我不知道是否有更简单的方法来做到这一点。
解决方案
鉴于我们正在处理 DLL,可以肯定地说我们正在处理 Windows。Windows 没有将 DLL“退出”到可执行文件的真正概念。Windows 确实知道标准函数调用是如何工作的(WINAPI
),但甚至不要求来自的函数GetProcAddress
是WINAPI
调用。这只是关于外部接口上的函数,inline
函数不需要遵守GetProcAddress
. 事实上,Windows 根本不需要你的代码从函数构建。有限状态编译器可能会发出使用跳转而不是调用的代码。
所以,这里的挑战是你的可执行文件有一个任意的 ABI,GCC 有自己的 ABI,两者完全不兼容。当您实现自己的“队列”机制时,您会发现很多。没有可能的通用机制。
推荐阅读
- python - 文件中的文本,DB_query 转化为元组或列表,并得到两者的区别
- angular - Angular 6:如何随机显示一个元素(*ngIf 中的 Math.random())
- c# - 如何在 ASP.NET CORE MVC 中正确返回嵌套的一对多数据?
- python - Pandas:如何获取 A 列值在给定列表中的行的 B 列值
- java - 使用没有 ID 的实体
- postgresql - 分区表上的 Postgres 错误(已删除类型 X 的 ERROR 42703 属性 4)
- python - 是否可以将数组传递给神经网络感知器?
- java - 从列表中删除多余的文件夹路径
- vector - 我应该如何存储我将要删除但从不添加的项目列表?
- excel - 如何将剪贴板中的数据提取到静态文件中