大佬教程收集整理的这篇文章主要介绍了c – 如何检测是否安装了自定义terminate()处理程序?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
问题是用户代码也可能用C编写并使用完全相同的C运行时版本,因此与我的库共享terminate()处理程序.该代码可能还希望更改terminate()处理程序以进行日志记录.所以他们会@L_772_2@set_terminate(),然后加载并初始化我的库,我的库也会@L_772_2@set_terminate()并覆盖他们的terminate()处理程序,这将是他们很难检测到的,因为terminate()处理程序是最后一件事我想他们会考试.
所以我想要以下内容.在库初始化函数里面我将retrieve the current terminate()
handler,查找它是否是标准的,然后如果它恰好是非标准的,我将存储其地址,稍后(如果需要)我的terminate()处理程序将写入日志然后将@L_772_2@转发给该自定义terminate()处理程序.
是否可以找到当前安装的terminate()处理程序是默认处理程序还是自定义处理程序?
@H_696_2@
class terminate_scope { public: terminate_function _prev; terminate_scope(terminate_function f = NULL){ _prev = set_terminate(f); } ~terminate_scope(){ set_terminate(_prev); } };
使用:
void MyFunctionWantsOwnTerminateHandler(){ terminate_scope termhandler(&OwnTerminateHandler); // terminate handler Now set // All my code will use that terminate handler // On end of scope,prevIoUs terminate handler will be restored automatically }
如果您完全确定需要,可以使用前一个处理程序链.
@H_696_2@ @H_696_2@以上是大佬教程为你收集整理的c – 如何检测是否安装了自定义terminate()处理程序?全部内容,希望文章能够帮你解决c – 如何检测是否安装了自定义terminate()处理程序?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。