לדלג לתוכן

תרגול מנוע השלמות עם IOCP

הרחיבו את המנוע לארבע בקשות לכל היותר. כל בקשה קוראת אזור אחר מן הקובץ ושומרת מזהה לוגי, offset, מספר בתים ושגיאה. המערך קבוע במשך כל הפעולות.

הוסיפו לולאת dispatcher עם timeout קצר. כאשר אין חבילת completion, הגדילו מונה timeouts בלי לשנות את מונה הפעולות הפעילות. כאשר יש חבילה עם שגיאה, סיימו את הבקשה בדיוק פעם אחת.

הוסיפו בקשת עצירה שמפסיקה הגשות חדשות, מבקשת CancelIoEx עבור כל בקשה פעילה וממשיכה לצרוך חבילות עד שמספר הפעולות הפעילות אפס. אין לסגור את ה־port כדי להיפטר מן ההמתנה.

בדקו קובץ קצר, קובץ ריק וקובץ שמכיל יותר מארבעה אזורים. כתבו מדוע true מ־ReadFile אינו גורם אצלכם להשלמה ידנית. הסבירו איזה שינוי היה נדרש אם הייתם מפעילים FILE_SKIP_COMPLETION_PORT_ON_SUCCESS.