问题标签 [handles]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
785 浏览

java - Java 句柄(mutex ?)被泄露而不被释放(不是文件句柄)

我有一个运行很长时间的复杂 Java 应用程序。该应用程序一遍又一遍地执行相同的操作,几乎没有细微差别。我的问题是 Windows 任务管理器显示了很多 Java 进程的泄漏句柄(不是文件句柄)。

在压力下运行应用程序一段时间后,我遇到了奇怪的故障,例如应用程序卡住、消失,或者在尝试打开文件时出现 FileNotFoundException(“系统资源不足,无法完成请求的服务”)。

我使用 Windows 任务管理器查看问题所在,发现对于 java.exe 进程 - 句柄数量增加得非常快。线程数没有增加,使用的RAM量也没有增加。

然后我使用 SysInternal 的 Process Explorer 来了解这些句柄是什么。我看到它们不是文件句柄,而是数千个“突变”类型的句柄,名称为 \BaseNamedObjects\??????n。根据网络上的一些网站,Mutant in Process explorer 的意思是 Mutex。我的 Java 应用程序不会故意创建任何互斥锁。

下一步是使用分析工具来缩小泄漏源。我使用了“J Optimizer”和“Java VirtualVM”。对于这两个应用程序,我无法检测到泄漏的句柄。他们有内存泄漏检测器,但我找不到检测泄漏句柄的方法。

我的问题是:如何调试这个问题?如何发现导致手柄泄漏的原因?

谢谢

0 投票
2 回答
1149 浏览

function - 在 Matlab 中连接两个手柄

我想连接我的两个axes.handles,这样当点击一个鼠标按钮时,另一个也会做第一个做的事情。我有一个外部函数,可以在单击鼠标时执行我想要执行的操作。我只需要更新 GUI 中的两个句柄,以便在单击一个轴时它会做同样的事情。

在主 GUI

这是我的外部函数,它通过调用mousemotion回调到主GUI;

感谢任何帮助。我不擅长提出问题。希望有人能帮忙。谢谢。

0 投票
2 回答
1228 浏览

matlab - MATLAB GUI 回调没有为另一个回调设置值?

我想要一个按钮来设置值,另一个按钮来输出变量的值。似乎使用以下代码第一次按下按钮时未设置该值。这是为什么?

0 投票
1 回答
575 浏览

c++ - 如何回收 RPC 运行时分配的线程句柄?

一点背景:

我正在开发一个使用 RPC 通过网络进行通信的 Windows 程序。网络连接不断建立和断开。RPC 调用是同步的,但有多个客户端线程同时运行。这些程序是对称的——也就是说,双方都充当客户端和服务器,并且运行完全相同的软件。它使用标准 Windows API 在 C++ 中实现。

问题:

Process Explorer 报告的线程句柄数会随着时间的推移而增加。看起来线程是由 RPC 运行时创建来处理请求的,但是当线程被回收时,句柄并不总是被清除。

特别是当传输大量数据或同时发生许多呼叫时(这两个因素齐头并进,我不确定哪个是相关的),这个数字会增加。

一个活动服务器可以在几天内建立数千个未使用的线程句柄,而在任何时候都不会使用超过 20 个线程。

问题:

我可以做些什么来防止手柄计数安装,因为我认为这可能会导致客户站点的稳定性问题?

0 投票
2 回答
184 浏览

matlab - 在调用自身的函数/脚本中替代“设置值”

我有一个脚本,当 if 语句的条件为假时,它会调用自己。用户定义的最大迭代次数可达 20 次。

问题是算法本身内部有一个变量会发生变化,如果 if 语句的条件为假,则整个过程将重新开始。问题是当它再次开始时要进行的新计算应该取决于最后计算的值而不是初始值。在这一点上,我正在通过使用 set-get 函数来实现我想要的。设置值标准的问题在于它会在每次运行时更新 GUI,这非常耗时。任何想法都非常感谢。下面是有效的代码,但很长;请注意,这是对实际脚本的非常简短的摘要,但它可以达到目的。

0 投票
1 回答
1518 浏览

c# - 在此 P/Invoke 用例中正确使用 SafeHandles

在 C# 中使用使用不透明句柄和内部引用计数的本机 Dll,我有以下 P/Invoke 签名(全部用 DllImport 属性装饰)

这些调用的含义如下:

  1. 从现有句柄 B 获取指向不透明类型 A 的指针/句柄。返回的句柄的内部引用计数不受影响。

  2. 新建一个A的句柄,内部引用计数是预先递增的,这个句柄应该由客户端用函数4释放,否则会发生泄漏。

  3. 告诉 dll 在内部增加句柄 A 的引用计数。这使我们可以确保 dll 不会在内部释放我们通过函数 1 获得的句柄。

  4. 告诉 dll 减少句柄的引用计数。如果我们增加了句柄的引用计数,或者通过函数 2 获取它,则应该调用它。

  5. 使用句柄执行一些操作

我想用我自己的 SafeHandle 子类替换 IntPtr。当我通过创建新句柄来获取句柄时,过程很明显;句柄的引用计数在 dll 中是预先递增的,所以我只是重写了 SafeHandle 的 Release 函数,并调用 releaseHandleToA(handle)。使用这个新类“MySafeHandle”,我可以像这样更改上面的 P/Incvoke 签名:

但是这里有一个错误:在函数 1 中,获取的句柄没有增加其引用计数,因此尝试释放句柄将是错误的。

所以,也许我应该始终确保 getHandleOfA 调用与立即 addRefHandleToA 配对,如下所示:

这安全吗?

编辑:好吧,不,这显然不安全,因为 addRefHandleToA(safeHandle); 可能会失败。有什么办法可以让它安全吗?

0 投票
2 回答
94 浏览

perl - 在 Perl 中打开一个闭包作为句柄

于是我有了这个疯狂的想法。现在,我正在使用 Text::CSV_XS 在 Word 中生成一个表格,如下所示:

但如果我能做这样的事情会更酷:

那么,我的问题是如何$something从第二个代码示例中取出,以及我需要做什么才能使闭包看起来像一个句柄?

0 投票
1 回答
468 浏览

c++-cli - 使用 gcroot 时出现 System.NullReferenceException

原来这个错误与 gcroot 无关——我粗劣地连接了一些构造函数,并在途中丢失了实例化的对象。

作为记录,以下代码的所有版本在此修复后都可以正常工作,但是添加简单的 Wrapper 类允许您在包装对象上使用 & 和 * 运算符,这是 gcroot 禁止的。我正在使用下面第三个代码块中概述的版本。


我正在尝试通过 .dll 使用一些测量仪器,但我在实施时遇到了问题。将所有代码写入 main.cpp 并使用这样的对象可以正常工作:

但是,当我将它放入一个类并用 gcroot 包装它时,我在执行时收到“未处理的异常:System.NullReferenceException:对象引用未设置为对象的实例”。

我怀疑 gcroot 或在非托管类中调用它可能会阻止仪器访问 M3D_FP_USB 对象。我尝试添加一个托管的 Wrapper 类,并将 Wrapper 对象的句柄提供给 User 类。但这并没有解决问题。

我的新代码看起来像这样,但我还不能用仪器测试它。有机会我会更新的。

0 投票
1 回答
238 浏览

c# - 将句柄(HttpApplication)方法从 VB.NET 迁移到 C#?

我正在将一些代码从 VB.NET 迁移到 C# (4.0)。

我发现结构如下:

在 C# 中翻译这种行为最直接的方法是什么?

0 投票
1 回答
614 浏览

.net - 在更改对对象的引用时,Visual Basic 中的 WithEvents 是否保留其 EventHandlers?

更改对对象的引用时WithEvents,Visual Basic 中是否保留其 s?EventHandler

假设我已经声明了一个按钮,触发事件:

现在我订阅了一个事件处理程序:

当我更改按钮对象的实例时,是否仍会调用该DoClick()函数,如下所示?