过程性硬件编程的错误处理技术
Error handling technique for procedural hardware programming
我正在写一个c++代码来控制一个特殊的设备,它是几个sdk的融合。我的代码看起来像
#define sdk1SafeCall(err) __sdk1SafeCall(err,__FILE__,__LINE__)
int errorcode = 0;
sdk1SafeCall(sdk1_InitializeDevice());
errorcode=sdk2_InitializeDevice();
errorcode=sdk3_InitializeDevice();
if (some_parameter)
{
errorcode=sdk2_readDevice(true);
}
else
{
errorcode=sdk3_writeDevice();
}
label again: errorcode=sdk1_readDevice();
if (error) goto again;
errorcode=close_everything();
使用参数将重新安排控制流。我目前的方法使用类似cudaSafeCall的东西来包装错误代码并退出。我不知道如何做的是在哪里存储这些错误的详细解释,或者如何从中恢复(例如goto示例)。在一天结束的时候,代码看起来真的很乱。
编辑
我有时用包装器处理错误。
编写错误安全的代码很难。在伪代码中,实际上根本不处理错误。Errorcode只会得到"close_everything()"的结果——即使其他一切都出了问题,它也可能成功了。
在c++中解决这类问题的典型方法是为每个"资源"(例如"设备")和throw
和exception
提供一个对象,如果出现不希望恢复的错误。在try/catch
块中包装整个函数[或函数的外部集合]。
当然,如果"失败是正常的"(例如,你试图从一个网络端口读取,你得到一个超时,因为没有可用的数据,这不是你应该抛出一个异常)。这应该使用一个返回值。
注意,使用对象来处理资源需要仔细设计代码,特别是你的析构函数在异常后运行时要做好清理工作。如果在构造函数中抛出异常,请确保没有留下任何东西——因为这是导致泄漏的原因。
自然有一大堆其他的解决方案——毕竟,我们在讨论编程,所以总是有至少11种不同的方法来解决一个问题。
相关文章:
- 警告处理为错误这里有什么问题
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 基于多个条件处理地图中的所有元素
- 如何用数字处理log(0)
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- 错误处理.将系统错误代码映射到泛型
- 从文本文件中读取时钟时间和事件时间并进行处理
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 如何在 SEAL 3.1 中使用 CRT 批处理技术Microsoft?
- 我该如何处理opencv中cvMatchTemplate中模板匹配技术的分数
- 大数据处理技术与书籍
- OpenGL中处理顶点的最佳技术?C++
- 过程性硬件编程的错误处理技术