【发布时间】:2022-01-20 21:12:36
【问题描述】:
我正在使用 C++ 中的 libportal 库来改进对现有应用程序的 Flatpak 支持,我遇到了一个问题,即 libportal 公开的许多 API 都是异步的,但代码库我正在使用的编写方式是假设相关操作是同步的。当然,我可以重构代码以支持异步操作,但这需要对应用程序的代码库进行重大更改,并且对于我需要 libportal 的目的而言,它不会带来明显的好处,主线程被阻塞并不重要.我与一位 libportal 维护者交谈过,他说他对添加我想使用的 API 的同步变体不感兴趣 (xdp_portal_open_file),而是建议我自己制作一个同步包装器,这最终让我我的问题:
如何在 C++ 中为基于回调的异步函数制作同步包装器?在这种情况下,回调是来自Gio 2.0 的GAsyncReadyCallback。
【问题讨论】:
-
简短的回答是:对于每个特定的用例,您要弄清楚如何去做。世界上每个这样的图书馆都没有通用的、按数字绘制的方法。你坐下来,浏览图书馆的参考资料,直到你完全理解它是如何工作的。一旦完全理解了库是如何开展业务的,就应该清楚如何为其实现替代 API 包装器。
-
@SamVarshavchik 在这种情况下,是否最好改写它,以便它询问如何在 libportal 的上下文中执行此操作?我并不是说我在期待别人为我做这项工作,但我什至不知道如何从这里开始。不,这不是我得到报酬的事情。
标签: c++ asynchronous callback synchronization asynccallback