threads

threads

נתבקשתי לממש את WaitForMultipleObject באמצעות WaitForSingleObject כאשר WaitForMultipleObject מקבל כפרמטרים רשימה של איבנטים, timeout ומשתנה בוליאני שאם הוא שקר מספיק שאיבנט אחד ישתחרר כדי WaitForMultipleObject יחזור ואם הוא אמת צריך שכולם ישתחררו כדי WaitForMultipleObject יחזור. שאלה - למי יש פתרון?
 

BugoK

New member
רעיון לפיתרון

נניח אתה מקבל n אובייקטים. אתה יוצר n חוטים (threads) שכל אחת עושה WaitForSingleObject לאירוע אחר מבין n האירועים שלך. בנוסף אתה מחזיק משתנה, counter, שמואתחל ל-n, שמוגן ע"י מנעול (mutex). כעת, בכל פעם שאיזהשהו אירוע התרחש, החוט חוזר, נועל את counter, מוריד את ה-counter ב-1, ומשחרר את ה-counter. ואז אתה עושה (תלוי בתנאי הבוליאני): אם התנאי הבוליאני גורס שצריך שכל האירועים צריכים להתממש, אזי התנאי שלך הוא while(counter>0)... ddddd. (תתעלם מ-ddddd). אחרת, התנאי הוא while(counter == n) dddd. מקווה שזה עוזר.
 
למעלה