עבור לתוכן

חיפוש מדריך ללימוד multithreading בC - או עזרה בבניית תוכנת לקוח בסגנון מסנג'ר

Featured Replies

פורסם

האם מישהו פה מכיר מדריך/מאמר/חוברת טובה באינטרנט ללימוד של הנושא הנ"ל? אני צריך משהו דיי מעמיק, גם כי אני לא מתמצא בנושא יותר מידי, וגם כי אני רוצה לדעת אותו כמו שצריך.

חיפוש בגוגל/msdn הניב כל מיני מדריכונים שהם ספציפים מידי / קצרים מידי / תאורטים מידי, וכו'.

אני צריך משהו שעובר על הנושא משלב התאוריה עד לשלב כתיבת התוכנית. ובwin32, לא unix.

תודה...

עריכה: טוב אולי במקום לשאול את השאלה הזאת, אני אציג פשוט את הבעיה.

בניתי שרת לתוכנת צ'אט, שיכולים להתחבר אליו כמה אנשים. עכשיו אני רוצה לבנות לקוח לתוכנה הזאת, עדיף בC++ סביבת windows. הבעיה העיקרית היא שאני צריך בו זמנית גם "להקשיב" לפורט שמחובר אל השרת, בשביל לדעת האם התקבלה ממנו הודעה חדשה, וגם לבדוק אם המשתמש כתב משהו, כדי שאני אוכל לשלוח את ההודעה שהוא כתב אל השרת.

אפשרות ראשונה: להתייחס לstdin בתור socket כשאני עושה select, ואז לדעת שהמשתמש כתב הודעה. (ירד מהפרק כי זה עובד רק בunix, כי "every thing is a file".

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

אפשרות שלישית: לעשות timeout אפסי לselect, ואז לבדוק את מצב הstdin, ושוב לחזור לselect. (התעללות במעבד, בטוח שזאת לא הדרך הנכונה לעשות את זה).

אפשרות רביעית: להשתמש ב thread שעושה את זה, וthread אחר שעושה את זה. (multithreading, מישהו?)

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

תודה.

(וכן, אני יודע שאני שואל הרבה :cool2:)

פורסם

multi-tasking זה מושג שיווקי, לא טכני.

ברמת מערכת ההפעלה יש לך multi-processing (הרצת כמה תוכניות במקביל) שההיבט של זה בתכנות זה תקשורת בין processes שונים דרך קבצים, named pipes, ו- mutex-ים.

ברמת ה- process יש לך multithreading ששם כבר יש לך דברים יותר מעניינים, כי ל- threads יש זיכרון משותף.

בעיקרון הנושאים שקשורים ל- multithreading הם סנכרון/תזמון, thread safety, ומניעת deadlocks.

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

פורסם
  • מחבר

לא משנה לי גם אם זה ספר של 800 עמודים. רק שמישהו יגיד לי מה השם שלו.

ואני מודע להבדל הזה בין multi prossessing ל multi tasking...

פורסם

ב- C++ כשלעצמו אין בכלל threads. למעשה גם sockets אין לך ב- C++ "נקי".

ב- MFC זה יותר קל וב- Java או C# זה עוד יותר קל.

ב- MFC אתה בכלל לא צריך threads, כי הכל יכול להיות תגובה ל- events.

פורסם

http://www.programmerworld.net/books/c%2B%2B.htm

אני מקווה שיש שם ספר שיעזור לך (לא היה כח לבדוק יש איזה 40 ספרים)

אתה יכול להוריד איזה ספר שתירצה רק תשים לב לשני דברים רוב הספרים מאוכסנים על אתר

שמאפשר הורדה מוגבלת ככה שהוא יתן לך להוריד רק קובץ 1 ביום אלא אם כן תירשם (וזה כבר עולה כסף)

אז תיקרא טוב על מה כל ספר לפני שאתה מוריד בנוסף לקבצים יש סיסמה שרשומה בסוף כל תקציר

אתה יכול לחפש גם באימיול ,שם תימצא המון ספרים,אני באופן אישי ההיתי מחפש ספרים של WROX

הם מעולים

פורסם

אם אתה רוצה לעבוד ב-C או C++ "טהור" תצטרך למצוא ספריה שהיא cross platform שיש לה threading או processes.

דוגמה לספריה כזו ב-C++ היא boost אשר יש לה רכיב של threads.

הייתי מפנה אותך ל-Beej's Guide to Sockets (חפש בגוגל). הוא ל-UNIX, אבל אני חושב שהעקרונות לא מאוד שונים והיתרון שלו הוא שהוא קצר ופשוט.

זה אולי יעזור (ואולי לא):

http://webcourse.cs.technion.ac.il/234120/Spring2006/en/ho.html

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים