Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要了解_set_security_error_handler()的帮助吗_C#_C++_Multithreading - Fatal编程技术网

C# 需要了解_set_security_error_handler()的帮助吗

C# 需要了解_set_security_error_handler()的帮助吗,c#,c++,multithreading,C#,C++,Multithreading,所以,我一直在读这篇文章: 我想定义我的自定义处理程序。但是,我不确定我是否很好地理解了机制。调用用户定义函数(例如,_set_security_error_handler()的参数)后会发生什么?节目结束后还会继续吗?如果是这种情况,是否可以只终止当前线程(假设它不是应用程序的主线程)。好的,每个线程都有自己的堆栈,因此如果线程的堆栈损坏,应用程序的其余部分不应受到影响 最后,如果确实可以只终止当前的执行线程,那么这样的操作会导致哪些潜在问题 我试图在一个非托管C++ DLL中完成这一切,我

所以,我一直在读这篇文章:

我想定义我的自定义处理程序。但是,我不确定我是否很好地理解了机制。调用用户定义函数(例如,_set_security_error_handler()的参数)后会发生什么?节目结束后还会继续吗?如果是这种情况,是否可以只终止当前线程(假设它不是应用程序的主线程)。好的,每个线程都有自己的堆栈,因此如果线程的堆栈损坏,应用程序的其余部分不应受到影响

最后,如果确实可以只终止当前的执行线程,那么这样的操作会导致哪些潜在问题


我试图在一个非托管C++ DLL中完成这一切,我想在我的C代码中使用。

< P>文档状态:

处理缓冲区溢出后,应终止线程或退出进程,因为线程堆栈已损坏

考虑到这一点,您似乎确实可以简单地终止线程。但是,您可以询问这会导致什么问题。TerminateThread的文档讨论了终止线程可能导致的以下问题:

  • 如果目标线程拥有关键部分,则不会释放该关键部分
  • 如果目标线程正在从堆中分配内存,则不会释放堆锁
  • 如果目标线程在终止时正在执行某些kernel32调用,则线程进程的kernel32状态可能不一致
  • 如果目标线程正在操作共享DLL的全局状态,则DLL的状态可能会被破坏,从而影响DLL的其他用户
请看这里:

在这种情况下,唯一“安全”的做法是退出流程