Is MFC Reentrant ?

WarLord

New member
Is MFC Reentrant ?

הכוונה האם אפשר לממש תוכנה שהיא סרבר (מספר משתמשים מפעילים אותה בו זמנית) ב MFC?
 

ihovav

New member
אפשר

אני אישית לא תכנתתי סרבר - אבל ראיתי במו עיני תכנה שחבר שלי תכנת ובה יש ספר טלפונים שעובד על רשת (סוקטים) ובה יש סרבר ויוזרים אני לא יכול ממש לעזור לך אבל אני מקווה שתמצא חומר בנושא בכל מקרה אני אחפש ואשתדל למצוא משהו שקשור...
 

עידית_

New member
סרבר זו לא תוכנה ש``מספר משתמשים

מפעילים אותה בו זמנית``. זו תוכנה רגילה לגמרי שמאזינה לסוקט על המחשב, ומתקשרת עם משתמשים שמתחברים לאותו סוקט, ע``י סוקטים נוספים. אפשר לעשות את זה ב-C וב-CPP ולכן וודאי שאפשר גם ב-MFC .
 

WarLord

New member
טעיתי בניסוח

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

ihovav

New member
כן אבל...

יש משתנים מיוחדים ל מולטי ת´רדד - ב WIN 32 API שמאפשרים יצירה של משתנה נפרד לכל ת´רד שנוצר וככה אין גישה מרובה לאותו המשתנה
 

eric_adler

New member
DLL אולי?

בחור יקר.. מה שאתה מדבר עליו, לפי ידעתי הוא פשוט קובץ DLL. בקשר למשתנים הגלובלים ישנו מנגנון שנקרא TLS שמאפשר גישה פרטית ל thread למרות שהם גלובליים! המנגנון שומר מידע ספציפי ל thread מבלי לחשוש ש thread אחר ידרוס אותו! אם תצטרך עזרה או משהו כזה, אשמח מאוד לכך. אריק.
 

WarLord

New member
מכירים XINU ?

מה שאמרת על ה DLL נשמע נכון. אין לי ידע מעשי על מוצרים ספציפיים כמו ויזואל, רק ידע תאורטי, לכן לקחתי ספר ואני לומד
ולנושא: ב-XINU יש קטעי קוד שאסור ששני תהליכים יריצו בו זמנית, למשל קטעי קוד של ה BIOS. מכאן נבעה השאלה האם ב-MFC וב-WIN API יש קטעים כאלו גם - אין לי כלים ספציפיים כדי לנסח את השאלה יותר במדויק במונחים של WINDOWS. פרט לזה קיבלתי אזהרה מעורפלת בנושא מחבר שהתעסק עם MFC פעם.
 

eric_adler

New member
יש...

אם הבנתי נכון את שאלתך.. אז ברור שכן! ישנם קטעי קוד שמספר thraeds צריכים לרוץ עליהם ומכאן שאחד יכול להרוס לשני (דריסת משתנים וכדו´). לכן ישנם מנגנוני סינכרון כגון mutex, event וכדו´ שמונעים גישה ל threads אחרים ללא הרשאה. ואסור לשני threads לרוץ על אותו קטע קוד "בו זמנית". למרות שבמנגנון סינכרון semaphore ניתן להגדיר מספר מסויים של threads שירוצו על אותו הקוד "בו זמנית". מקווה שהבנתי את השאלה נכון ועזרתי.. אריק.
 

eric_adler

New member
אהה ועוד משהו...

בקשר לשאלה שלך על הפלט ב win32 אם תוכל לנסח את השאלה שלך בצורה קצת יותר מפורטת כי לא הבנתי את הבעייה שלך.. כאני כותב קוד תחת windows ב win32 אין לי שם קטע מסורבל של הדפסה.. לא משנה מה זה! אשמח להבין את הבעיה ולנסות לעזור! אריק.
 

אמיר ט

New member
סרבר חכם

סרבר חכם הוא לא איזה תוכנה שמריצה לולאה ובפנים יכולה לעבוד עם כמה יוזרים. כל היופי זה לעשות תוכנה שתעבוד עם תת תהליכים, לדוגמא ב יוניקס של FORK שפותח תת תהליך של התוכנה לטפל בכל יוזר. זה דברים מתוחכמים, אני לא יוע בקשר ל MFC, אבל רוב השפות החזקות היום C,PERL ועוד כל מיני תומכות בדברים כמו FORK. אמיר.
 

עידית_

New member
מאוד לא כדאי להשתמש ב-fork לכל

לקוח כשמתכנתים סרבר. זה יביא לפיצוץ של תהליכים במערכת. הרבה יותר טוב להשתמש בת´רדים או לחילופין בשיטת multiplexing.
 
למעלה