Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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++ 多线程DirectX代码中SEHException的原因是什么?_C++_Windows 8_Directx_Windows Runtime_Directwrite - Fatal编程技术网

C++ 多线程DirectX代码中SEHException的原因是什么?

C++ 多线程DirectX代码中SEHException的原因是什么?,c++,windows-8,directx,windows-runtime,directwrite,C++,Windows 8,Directx,Windows Runtime,Directwrite,我正在使用一个我不熟悉的相当大和复杂的代码库,它使用DirectWrite进行文本渲染。我不知道这是否重要,但这是一个WinRT(Windows应用商店)应用程序 该应用程序是多线程的,一些DirectX调用是从后台(而不是UI)线程完成的。所有的BeginDraw和EndDraw调用都是从UI线程进行的,一些DrawText调用是从后台线程进行的。我确保这些调用没有重叠,DrawText只在BeginDraw和EndDraw对之间调用 但是,有时调用DrawText方法时,我会得到一个SEHE

我正在使用一个我不熟悉的相当大和复杂的代码库,它使用DirectWrite进行文本渲染。我不知道这是否重要,但这是一个WinRT(Windows应用商店)应用程序

该应用程序是多线程的,一些DirectX调用是从后台(而不是UI)线程完成的。所有的BeginDrawEndDraw调用都是从UI线程进行的,一些DrawText调用是从后台线程进行的。我确保这些调用没有重叠,DrawText只在BeginDraw和EndDraw对之间调用

但是,有时调用DrawText方法时,我会得到一个SEHException。从UI线程调用时,它从不发生,只有从后台线程调用时才会发生。
并非每台计算机都会发生这种情况。它经常发生在一些人身上,而在其他人身上根本无法复制。
VS调试器给出的确切消息是:“x.DLL中发生了类型为'System.Runtime.InteropServices.SEHException'的第一次意外异常”,当我调用ID2D1DeviceContext.DrawText()函数时,调试器会在DrawText调用时中断d2d1.h头文件

当抛出SEHException时,是否有任何方法来调试或诊断出现了什么问题?(它显然与从后台线程调用DrawText函数有关。)

除此之外,是否有从后台线程调用DirectX函数的一般规则?(我确保D2D1工厂是用D2D1FasyYyType,多线程线程选项创建的)。< /P> < P> A SEH异常只是Win32异常:Windows内部使用的异常机制,这与C++异常不同。

所以SEH异常告诉您的只是“某个Windows函数抛出了一个异常”。与任何其他例外情况一样,这种情况的发生有很多原因

因此,询问这种例外的“通常原因”是什么是徒劳的


出现
std::异常的常见原因是什么?有很多这样的错误。

< p>一个SEH异常只是一个Win32异常:Windows内部使用的异常机制,这与C++异常不同。 所以SEH异常告诉您的只是“某个Windows函数抛出了一个异常”。与任何其他例外情况一样,这种情况的发生有很多原因

因此,询问这种例外的“通常原因”是什么是徒劳的


出现
std::异常的常见原因是什么?它们有很多。

这个问题只发生在一台计算机上,不能在其他计算机上重现。视频卡驱动程序更新后,它也停止在计算机上,所以它可能是一些驱动程序问题(英伟达驱动程序已经有一些问题,Windows 8)。视频卡驱动程序更新后,它也停止在计算机上,所以它可能是一些驱动程序问题(NVIDIA英伟达驱动程序已经出现了一些问题)。

< P>请打开DirectX调试运行时。在VisualStudio中运行。它有非常详细的错误检查,打印到控制台。要打开它,请运行DirectX控制面板。

确保打开DirectX调试运行时。在VisualStudio中运行。它有非常详细的错误检查,打印到控制台。要打开它,请运行DirectX控制面板。

听起来像是竞争条件。当抛出结构化异常时,程序在做什么?(即,堆栈上有什么?执行什么函数?是您的代码还是平台代码?)引发了什么异常?(所有本机异常都是使用结构化异常处理进行处理的,因此“某个地方抛出了一个SEH异常”并不是特别有用。)我用确切的异常消息和抛出的位置澄清了这个问题。听起来像是竞争条件。当抛出结构化异常时,程序在做什么?(即,堆栈上有什么?执行什么函数?是您的代码还是平台代码?)引发了什么异常?(所有本机异常都是使用结构化异常处理进行处理的,因此“某个地方抛出了一个SEH异常”并不是特别有用。)我用确切的异常消息和抛出的位置澄清了这个问题。谢谢,这为我澄清了它的含义。那么,当抛出SEHException时,是否有任何方法可以调试或诊断到底是什么错误?一般来说,从后台线程调用DirectX函数(如DrawText)并不违法,是吗?我帮不了你。从历史上看,DirectX有很多多线程限制,但我不知道D2D是如何具体处理它的。谢谢,这为我澄清了它的含义。那么,当抛出SEHException时,是否有任何方法可以调试或诊断到底是什么错误?一般来说,从后台线程调用DirectX函数(如DrawText)并不违法,是吗?我帮不了你。从历史上看,DirectX有很多多线程限制,但我不知道D2D具体如何处理它。