gpt4 book ai didi

C:从后台线程返回异步错误的模式?

转载 作者:太空宇宙 更新时间:2023-11-04 01:15:53 24 4
gpt4 key购买 nike

我正在编写一个开源 C 库。这个库相当复杂,有些操作可能需要很长时间。因此,我创建了一个后台线程来管理长时间运行的任务。

我的问题是我还没有找到一种优雅的方式来从后台线程返回错误。假设后台线程重组文件或做定期维护失败了——怎么办?

我目前看到两个选项:

1) 如果用户有兴趣看到这些错误,他可以注册一个回调函数。

我不喜欢这个选项——用户甚至不知道有后台线程,所以他很可能会忘记设置回调函数。从可用性的角度来看,这个选项很糟糕。

2) 后台线程将错误存储在全局变量中,下一个API函数返回此错误。

这就是我目前正在做的事情,但我也不是 100% 满意它,因为这意味着用户必须期待从每个 API 函数返回的每个可能的错误代码。 IE。如果后台线程设置了一个 IO 错误,而用户只想知道库的版本,那么尽管 get_version() API 调用根本不访问磁盘,他还是会得到一个 IO 错误。同样,糟糕的可用性......

还有其他建议/想法吗?

最佳答案

也许对于“长时间运行的操作”(您希望使用线程的操作)为用户提供两个选项:

  • 阻塞 DoAction(...)返回状态
  • 非阻塞 DoActionAsync(..., <callback>)将状态提供给用户提供的回调函数

这让用户可以选择他们想要如何处理长操作(而不是你为他们决定),并且很清楚如何返回状态。

注意:我想如果他们调用 DoActionAsync ,并且用户未指定回调(例如,他们传递 null ),则调用不会阻塞,但用户不会/不需要处理状态。

关于C:从后台线程返回异步错误的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/641681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com