המתנה לסגירת חלון...

MotiAd

New member
המתנה לסגירת חלון...

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

ASHY

New member
אממ אני לא בטוח שבנתי

הבעיה שלך שאחרי שהבנאי עובד, התוכנית מסתיימת מהר מדי ובחלון נסגר? אם כן אתה יכול לעשות אחד משתיים (אולי יש שלוש שלא חשבתי עליו): 1. לתת לתוכנית משימה, להמשיך אותה בתוך לולאה או משהו, כדי שהתוכנית תמשיך לפעול 2.הפונקציה sleep(int) (לא בטוח שזה int) מקבלת אז הזמן אשר היא אמורה לעקב את התוכנית. לוינדוס: נמצאת בספריה windos.h או windows.h (לא בטוח) והזמן הוא מילי השניות ללינוקס: ספריה: unistd.h זמן: שניות (הרבה יותר נוח, עוד נקודה ללינוקס)
 

DNile

New member
נקודה ללינוקס?

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

MotiAd

New member
לא ולא...

אני כותב על וינדוס ואח"כ אני אעביר את המערכת בצורה מלאה ללינוקס. כרגע אני עובד עם ה-API המלא של וינדוס (זאת אומרת לא MFC ולא שום דבר שתלוי בספריות כל שהן). בכל אופן מה שקורה הוא, שדרך מחלקה אני יוצר חלון שמוצג על המסך. ברגע שהחלון מוצג זאת אומרת שכל הקוד שנוגע ליצירה שלו נגמר ואז שוב הביצוע עובד לפונקצייה הראשית. וכתוצאה החלון נסגר והתוכנית מסתיימת. מה שאני עשיתי זה ליצור THREAD שכל הזמן בודק אם החלון פתוח והמחלקה עדיין לא נהרסה ומשכיב את עצמו לישון ל-5 עד שנייה אחת זה לא קריטי בינתיים, והתוכנית ממתינה ל-THREAD הזה שיסתים דרך WaitForSingleObject ברגע שהוא מזהה שהחלון נסגר הוא מסיים את פעולתו וסה טוט. נגמר הבלאגן. יש דרך יותר נחמדה לעשות את זה שלא דרך לולאות שטוחנות את זמן הביצוע של המעבד? שלכם, מוטי.
 

firgunen

New member
אני לא מבין,

מה הבעיה עם WaitForSingleObject ? זו המטרה שלו בחיים
 

MotiAd

New member
הוא לא עובד עם חלונות...

אבל פתרתי את זה בדרך אחרת. עקיפה משהו אבל לא נוראה כ"כ.
 

gilad_no

New member
למה פשוט לא לעשות NEW למחלקה???

וככה היא לא תהרס ביציאה מהפונקציה. את המחלקה אתה יכול למחוק בWMֹNCDESTROY. ככה בדיוק עובד MDI בWTL.
 

gilad_no

New member
ועוד דבר,

אם בסה"כ אתה רוצה להציג חלון ולחכות שהוא ייסתיים, תעשה MODAL DIALOG. בדיוק בשביל זה המציאו אותם!
 

MotiAd

New member
את הבעיה בדיוק...

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