c++ - 如何 GC(删除)GetOpenFileName 的线程

标签 c++ winapi garbage-collection mingw

我注意到当我使用函数 GetOpenFileName 时,我的应用程序中分配了很多线程。在对话框关闭并且函数返回后,我该如何删除这些?我还在这些线程中遇到了 SIGSEGV 错误,这些错误不会使我的应用程序崩溃,但仍然很烦人,因为它们不知从哪里冒出来,以后可能会导致严重的内存问题,而且 win32 api 不应该像这样有缺陷, 应该是?我做错了什么吗?

另外,我是 c/c++ 的初学者,所以请不要对我太苛刻。

我的代码:

OPENFILENAME open;
ZeroMemory(&open, sizeof(open));
char szFileName[2048] = {};

open.lStructSize = sizeof(OPENFILENAME);
open.hwndOwner = NULL;
open.lpstrFilter = "Képek\0*.jpg;*.jpeg;*.gif;*.png;*.bmp\0\0";
open.lpstrFile = szFileName;
open.nFileOffset = 1;
open.nMaxFile = 2048;
open.lpstrTitle = "Képek kiválasztása..";
open.Flags = OFN_EXPLORER | OFN_ALLOWMULTISELECT | OFN_FILEMUSTEXIST;

std::string links = "";
if (GetOpenFileName(&open)) {
    ...
}

最佳答案

对于这些线程,您无能为力。该对话框确实创建了一些由操作系统本身管理的工作线程,并且还可能安装了第三方资源管理器插件,这些插件也通过对话框使用资源管理器间接加载并创建了自己的线程。只要对话框没有使您的代码崩溃,就忽略额外的线程。它们是与您的应用无关的操作系统层线程。

关于c++ - 如何 GC(删除)GetOpenFileName 的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17935552/

相关文章:

windows - 添加并获取CHM文件版本

c++ - 是否有可能让 Visual Studio 2017 将 c++ 代码编译成 exe 以外的文件类型?

c++ - 为什么红灯不亮?

c++ - 使用 curllib 构建应用程序

c++ - SendMessage 无法将自定义消息发送到主窗口

python - 使用 ctypes 访问未在方法映射表中公开的方法

c++ - 为什么我不能将具有不可复制类参数的 lambda 转换为 std::function?

c++ - SendInput() 不等于在 C++ 键盘上手动按键?

macos - 为什么 Swift 不自动处理循环引用(强引用循环)

python - Python模块是否曾经被垃圾收集?