scanning a directory using multiple threads -WIN32API
שלום לכולם!
כתבתי תוכנית לסריקת ספרייה . התכנית עבדה מצויין ברקורסיה , אבל כשניסיתי לשנות אותה לסריקה בעזרת מספר threads -התעוררה בעייה.
הרעיון: להיכנס לספרייה , לסרוק קובץ אחר קובץ , ואם הקובץ הוא ספרייה - ליצור thread חדש (כחלק ממערך) המקבל כפונקציית ההתחלה שלו את פונקציית הסריקה המקורית + שם הספרייה אליה הגענו כפרמטר. בסוף main הכנסתי WaitForMultipleObjects כדי שה-primary thread לא יסתיים לפני שאחד ה-threads הסורקים סיים את מלאכתו.
נשמע טוב? - אז זהו שזה לא עובד. הוא לא מצליח לשנות ספרייה כדי להיכנס לתת-הספרייה הבאה (==סורק רק את הספרייה הנוכחית:תתי-ספריות וקבצים אך לא מצליח להיכנס פנימה).
מצ"ב הקובץ.
תודה מראש.
Answer
i LOOKED INTO YOUR CODE , SUB THREADS ARE CREATED BUT DONT TRAVERSE BECAUSE THE GET WRONG PARAMETER :
hThreads[numOfThreads]=CreateThread( /*create a new thread*/
NULL,
0,
(LPTHREAD_START_ROUTINE) traverse,
wfdData.cFileName ,/*send file name to new thread*/
0,
& threadID);
wfdData.cFileName INCLUDES ONLY FILENAME WITHOUT THE FULL QUALIFIED PATH, YOu should send full path , anyway this program is very bad using so much threads (as a matter of fact using so many threads causes a deterioration with program behaviour : changing stack pointers mapping memory files , etc. Windows explorer uses -for example 1 additional thread for each window (IShellView) that is opened. GoodLuck.
(use also const pointers LPCSTR=>LPCTSTR