【发布时间】:2020-06-23 16:04:51
【问题描述】:
我正在开发一个作为动态库 (DLL/so) 的 SDK。用户可以在运行计算之前设置很多参数。但我想提供一种动态更改参数的方法,它应该停止当前计算并使用新参数重新启动它。所以一般用法应该是这样的:
Client Caller thread -----> Call my SDK -----> Computation code
^
|
|
Client UI Thread ----> Request cancelation ------------
我有很多关于机制的问题,我想知道这样做的好做法是什么。
1) 如何处理中断?
- 我是否应该在异步线程中运行我的计算,然后只删除该线程的结果?
- 我是否应该使用计算线程有时会检查以返回起点的
std::atomic<bool>?
2) 如果使用第二个选项,返回发射点的最佳方式是什么?
- 在这种情况下可以使用 C++ 异常吗? (注意:我已经在计算代码中使用异常处理非常罕见的情况。)
- 是否应该一直处理错误代码并进行早期检查以避免计算?
- 可以使用
longjmp或类似的东西吗?
【问题讨论】:
标签: c++ multithreading dll cancellation