0

我注意到当我使用该函数时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)) {
    ...
}
4

1 回答 1

2

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

于 2013-07-29T23:23:58.727 回答