gpt4 book ai didi

c++ - 处理 Win 7 应用程序中的限制

转载 作者:行者123 更新时间:2023-11-28 06:57:04 26 4
gpt4 key购买 nike

我有一个适用于 Windows 7 的 C++ 多线程应用程序。此应用程序被编译为 DLL 以供另一个 C# 应用程序使用。

我长时间运行多线程代码来处理流数据。如果我将这段 C++ 代码编译成一个独立的 .exe,并运行代码,它就可以正常工作。

但是当它变成一个 DLL 并且当 C# 代码与它一起运行时,程序在长时间运行后会因访问冲突错误而崩溃。当我从 Python 脚本加载 DLL 并长时间运行它时,我看到了类似的崩溃。

当我使用任务管理器观察行为时,我看到系统句柄计数以非常快的速度增加。代码运行大约 2 小时后,我看到句柄数超过 300,000 标记,并且还在不断增加。

在多线程代码中,线程不断地被创建和销毁。我看到线程退出后,线程句柄没有被 CloseHandle 函数显式关闭。这可能是一个潜在的问题吗?

如何确认这是句柄问题。有什么方法可以更好地监视这些系统资源?在尝试任何修复之前,我想知道所有可能的解决方案,因为测试运行需要很长时间(超过 5 小时)才能重现崩溃。

最佳答案

系统内部 Process Explorer可以查看一个进程中的句柄,将其识别为线程、互斥、文件等句柄。您肯定需要 CloseHandle() 每个线程句柄来清理它们。

顺便说一句,创建线程是一项开销很大的操作。如果您正在创建大量线程作业,最好将作业排队并创建一个线程池(通常大约等于系统中的 CPU 数量),这些线程从队列中拉出并执行作业。

关于c++ - 处理 Win 7 应用程序中的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23024927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com