0
我注意到,當我使用函數GetOpenFileName
時,很多線程在我的應用程序中被分配。在對話框關閉並且函數返回後,如何去除這些對象?我在這些線程中也遇到過SIGSEGV
錯誤,這些錯誤不會導致我的應用程序崩潰,但它們仍然很煩人,因爲它們不知從何而來,並且可能會在以後導致嚴重的內存問題,並且win32 api也不應該像這樣有缺陷,應該如何?難道我做錯了什麼?如何GC(刪除)GetOpenFileName的線程
另外我是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)) {
...
}
那又如何分配內存?有沒有辦法擺脫那些東西?操作系統保持這些線程和內存與它們相關聯的任何原因?他們是否被重用,如果我只在程序中調用這個函數,沒有任何緩存的理由,這些都不能被控制嗎? – 19greg96
同樣,這一切都發生*你的應用程序外*,所以忽略它。內存不在您的應用程序中分配,它在操作系統本身。線程由操作系統管理,而不是您的應用。不,這些行爲都不能在您的應用內部進行控制。它對您的應用程序透明,由對話框和操作系統在內部使用,作爲私有實現細節。所以就忽略它然後繼續前進。 –
猜猜我可以忍受。但是我仍然有點難以理解它。 – 19greg96