בחלונות לא מבדילים בין פעולה לא חוסמת לפעולה אסינכרונית

כן, עוד פוסט טכני.

כאשר מבצעים פעולות קבצים/sockets ביוניקס, נהוג להבדיל בין מספר סוגי פעולות. השאלה הראשונה שיש לשאול היא “האם הפעולה חוסמת” (blocking). פעולה חוסמת היא פעולה שלא חוזרת עד שהפעולה הושלמה. לצורך הדוגמא, דמיינו את המצב הבא. אנחנו מבקשים לכתוב לחיבור TCP/IP, מה שדורש שחלק מה-buffer שלנו ייכתב לחיבור. הבעיה היא שהצד השני של התקשורת מגיב לאט, מה שאומר שמידע קודם שכתבנו עוד לא קיבל אישור מהצד השני, והוא ממתין בצד שלנו. במצב כזה עלול להיות מצב שבו אין לשכבת ה-TCP/IP שלנו מקום לנתונים הנוספים שאנחנו מנסים לכתוב. אם אנחנו משתמשים בפעולה חוסמת מה שיקרה בשלב הזה זה שהתוכנית שלנו תמתין עד שהצד השני ייאשר קצת נתונים קודמים, מה שיפנה חוצצים, מה שיאפשר לקבל את הנתונים החדשים שאנחנו מנסים לכתוב ולשחרר את פעולת הכתיבה שלנו. אנחנו חסומים מלהמשיך בביצוע התוכנית עד שהמידע (לפחות חלקו) מתקבל.
להמשיך לקרוא בחלונות לא מבדילים בין פעולה לא חוסמת לפעולה אסינכרונית

פונקציות מוזרות בחלונות ושימושיות של תוכנה קניינית

הפוסט הזה הוא הֶלְחֵם של שני פוסטים. הפוסט הראשון הוא בקטגורית “דברים שלומדים כשעובדים על Wine”, וקרה לי לפני כמה ימים. השני הוא לגבי שימושיות תוכנה, והרעיון לו בא היום. הנושאים, באופן מפתיע, מדברים על אותו הדבר, ועל כן אוחדו.

בואו נתחיל משאלה טיפשית. כאשר מפתח בחלונות קורא לפונקציה שנקראת BringWindowToTop, מה הוא מצפה שיקרה? מותר לכם לקרוא את התיעוד ב-MSDN. אפילו נתתי לכם קישור לתיעוד כפי שהוא מופיע באתר של מיקרוסופט.

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

Bear