Desktop switchen
-
Hi!
Mit folgendem Source versuche ich mein Desktop zu switchen:CWnd *pWnd = CWnd::FindWindow("Progman", "Program Manager"); if(!pWnd) return; CWnd* pChild = pWnd->GetWindow(GW_CHILD); HWND hWnd; pChild->GetDlgItem(0x1, &hWnd); ASSERT(IsWindow(hWnd)); CWnd* pCtrl = (CWnd*)CWnd::FromHandle(hWnd); ((CListCtrl*)pCtrl)->DeleteAllItems(); LPITEMIDLIST id; static char path[1024]; SHGetSpecialFolderLocation(hWnd,CSIDL_DESKTOPDIRECTORY ,&id); SHGetPathFromIDList(id,path); CString strDesk; strDesk = _T(path); strDesk += "\\*.*"; CFileFind finder; BOOL bWorking = finder.FindFile(strDesk); while (bWorking) { bWorking = finder.FindNextFile(); ((CListCtrl*)pCtrl)->InsertItem(0,(LPCTSTR)finder.GetFileName(),0); }Warum geht das nicht? InsretItem liefert manchmal (!!) nen reda access error

Danke&mfg
-
Hallo !

die tatsache das der fehler "manchmal" kommt und lässt meiner meinung nach auf ein zugriffsproblem von zwei oder mehreren threads schließen ... Hast du mehrere Threads am laufen die auf das Control zugreifen ?
wenn ja dann machs bitte so dan klappts auch mit den nachbarn
CCriticalSection cs; // cs muss von allen threads erreichbar sein !!!!! function(){ cs.Lock(); //Aktionen mit der Listbox cs.Unlock(); }Aber vorsicht trifft ein thread auf cs.Lock(); und ein anderer thread war "vor ihm da" und hat noch nicht Unlock() passiert wird der nachfolgende thread solange schlafen gelegt bis der andere zum Ende (Unlock) gekommen ist...
Es gibt auch noch andere möglichkeiten um Zugriffsprobleme bei mehreren threads zu beseitigen aber ich hab mich mit denen noch nicht so wirklich befasst weil das oben für meine belange eigentlich immer gereicht hat
wenn du nicht mehrere threads benutzt was bei solchen aktionen ratsam wäre

würd ich mir mal die datei angucken bei der er ärger macht {irgendwo dran musses ja liegen}
mfg tRiG4