中断或取消DLL中的长时间计算

问题描述 投票:-1回答:1

我正在将SDK开发为动态库(DLL / so)。用户可以在运行计算之前设置很多参数。但是我想提供一种动态更改参数的方法,该方法应停止当前计算并使用新参数重新启动它。因此,一般用法应类似于:

Client Caller thread -----> Call my SDK -----> Computation code
                                                      ^
                                                      |
                                                      |
Client UI Thread ----> Request cancelation ------------

我对机制有很多疑问,我想知道这样做的最佳实践是什么。

1)如何处理中断?

  • 我应该在异步线程中运行我的计算,然后删除该线程的结果吗?
  • 我是否应该使用计算线程检查返回到起点的std::atomic<bool>

2)如果使用第二个选项,返回到发射点的最佳方法是什么?

  • 在这种情况下可以使用C ++异常吗? (注意:在计算代码中,我已经在非常罕见的情况下使用了异常。)
  • 应该具有错误代码处理以及早期检查以避免计算?
  • 是否可以使用longjmp或类似的东西?
c++ multithreading dll cancellation
1个回答
1
投票

为了进行适当的对象清理和资源回收,您需要引发异常或仅停止计算并让计算函数正常返回。

© www.soinside.com 2019 - 2024. All rights reserved.