多线程环境中出现“0x0000006 句柄无效”错误
"0x0000006 The handle is invalid" error coming in multi-threaded environment
我创建了一个 ASP 3.5 网络服务,它使用一些 Windows API 执行缩略图生成。这些 API 使用 Windows HANDLE
或 HFILE
进行处理。我在 JavaScript 中使用异步 AJAX 来调用网络服务。
- 服务器:ASP3.5 网络服务
- 客户:AJAX 在 JavaScript
当我仅发起 1 个请求时,即 Web 服务中的单线程,没有出现错误,但是
当我发起多个请求时,即 Web 服务中的多个线程,下面列出的内部 API 随机给出错误,没有任何特定模式。 GetLastError
returns 错误代码 0x00000006
.
内部 API:
一套
_llseek
_lread
第二组
CreateFileMapping
MapViewOfFile
备注:
_llseek
和 _lread
使用 HANDLE
使用
创建
CreateFile(str, 0x80000000, 0x00000001, IntPtr.Zero, 3, 1, IntPtr.Zero)
CreateFileMapping
和 MapViewOfFile
使用 HANDLE
创建使用,
CreateFile(sThumbnailFile, (uint)(0x80000000 | 0x40000000), 0, IntPtr.Zero, 2, 128, IntPtr.Zero);
没有错误或 INVALID_HANDLE_VALUE
return 代码在创建 HANDLE
时出现。
此问题在多个请求中随机出现。
- 每个
HANDLE
指向不同的文件。
我什至用 CRITICAL_SECTION
测试过,但问题仍然存在。请提出可能的错误是什么?
我知道解决方案看起来有点奇怪..但问题是:
由于内存或其他资源不足,其他 API 中的其他 HANDLE
未正确关闭,因此这些 API 在多线程环境中开始在运行时出错。
谢谢。
我创建了一个 ASP 3.5 网络服务,它使用一些 Windows API 执行缩略图生成。这些 API 使用 Windows HANDLE
或 HFILE
进行处理。我在 JavaScript 中使用异步 AJAX 来调用网络服务。
- 服务器:ASP3.5 网络服务
- 客户:AJAX 在 JavaScript
当我仅发起 1 个请求时,即 Web 服务中的单线程,没有出现错误,但是
当我发起多个请求时,即 Web 服务中的多个线程,下面列出的内部 API 随机给出错误,没有任何特定模式。 GetLastError
returns 错误代码 0x00000006
.
内部 API: 一套
_llseek
_lread
第二组
CreateFileMapping
MapViewOfFile
备注:
创建_llseek
和_lread
使用HANDLE
使用CreateFile(str, 0x80000000, 0x00000001, IntPtr.Zero, 3, 1, IntPtr.Zero)
CreateFileMapping
和MapViewOfFile
使用HANDLE
创建使用,CreateFile(sThumbnailFile, (uint)(0x80000000 | 0x40000000), 0, IntPtr.Zero, 2, 128, IntPtr.Zero);
没有错误或
INVALID_HANDLE_VALUE
return 代码在创建HANDLE
时出现。此问题在多个请求中随机出现。
- 每个
HANDLE
指向不同的文件。
我什至用 CRITICAL_SECTION
测试过,但问题仍然存在。请提出可能的错误是什么?
我知道解决方案看起来有点奇怪..但问题是:
由于内存或其他资源不足,其他 API 中的其他 HANDLE
未正确关闭,因此这些 API 在多线程环境中开始在运行时出错。
谢谢。