overlapped IO בwindows

cyberia2ooo

New member
overlapped IO בwindows

יש לי קובץ שאני עושה עליו פעולות כתיבה וקריאה בעזרת overlapped io בwindows עכשיו קיימים מצבים שבזמן הכתיבה למחשב אני רוצה לבטל את פקודת הכתיבה בזמן הכתיבה.... העניין הוא שcancelio לא מבטל את הכתיבה... (לדוגמא לקחתי buffer ממש ממש גדול, ושלחתי אותו לכתיבה בקובץ שנפתח כoverlapped ואז ישר קראתי לcancelio וcancelio חזר לי רק אחרי שכל הbuffer נכתב לדיסק... יש דרך לחתוך את הכתיבה הזו ישר שאני רוצה?
 

voguemaster

New member
לא לעבוד בצורה הזו אולי ?

הרעיון המדהים שמיקרוסופט המציאו שנקרא async IO הוא פשוט בדיחה. כביכול זה נועד כדי לחסוך לך פתיחה של thread חדש וטיפול בסינכרון בינו לבין שאר התוכנית אבל בפועל אתה צריך ללמוד את הכל הנואנסים של משהו שהוא גם ככה טריויאלי לביצוע בעצמך.
 

cyberia2ooo

New member
זה לא פתרון

א' אם אני ממש בעצמי אני אצטרך להתחיל לחלק את הbuffer שלי ולכתוב בבלוקים, ואז אם הבלוק הקטן שאני כותב נתקע בזמן הכתיבה אז אני שוב תקוע בלחכות לו... ושנית, אני מנסה להמנע מלפתוח threads
 

voguemaster

New member
המממ

בוא נראה מה לא בסדר בתמונה הזאת: אתה מנסה להימנע מלהרים thread נוסף אבל אתה רוצה להשתמש בפונקציונליות שממומשת בדיוק כך. אין ארוחות חינם אחשלי, כך או כך יהיה שם thread ואם אתה מסתמך על משהו חיצוני (בטח של מיקרוסופט) אז זה גורר את כל הבעיות של זה.
 

cyberia2ooo

New member
הסיבה שאני לא רוצה להרים thread

היא לא בשביל להמנע מthreadים אלה כי אז הביטול של הפעולה מבחינתי עם terminatethread הוא מגעיל למדי... חשבתי, קיוותי, שהמערכת הפעלה מספקת לי דרך להפסיק פעולת IO מסיבה זו או אחרת מבלי שאני אצטרך לפחד מלפגוע במשהו בדיסק
 
אז שאלה (נצל"ש)

בפורום ASP אמר מישהו פעם שרצוי לתת ל-async את הערך true כאשר עובדים עם האובייקטים MSXML. כיוון שזה משאיר טריד פתוח בדפדפן. (או משהו דומה לזה). אתה אומר שלא צריך להשתמש בזה. אז מה כן מה לא ? (אני דיי בור בשביל להחליט בעניין כזה).
 
למעלה