שים לב למשהו קריטי,
אופטימיזציות של הקומפיילר עשויות להביא לכך שה-THREAD לא יסתיים לעולם. זאת מכיוון שהדגל אינו משתנה בתוך ה-THREAD עצמו (אלא בד"כ מתוך THREAD אחר) - והקומפיילר עשוי להניח שמכיוון שאינו משתנה בתוך ה-THREAD, הוא אינו משתנה לעולם, ולכן תבוצע אופטימיזציה ובמקום הדגל יהיה שם פשוט true - מה שיוביל לתקיעה של ה-THREAD. ראשית עליך להגדיר את הדגל בתור volatile - בשביל זה בדיוק קיימת ה-keyword הזו. שנית, הייתי מקציב ל-thread זמן מסוים לרדת, ואם הוא לא מציית - להשתמש ב-TerminateThread. כשאני מוריד thread אני בד"כ משתמש ב-WaitForSingleObject על ה-Handle של ה-Thread - כשהוא יורד, ה-Handle שלו נהפך להיות signaled ו-WFSO יחזיר לך WAIT_OBJECT_0.