我注意到当我使用函数 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/