לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #31  
ישן 06-09-2005, 07:48
צלמית המשתמש של bazooka joe
  bazooka joe bazooka joe אינו מחובר  
 
חבר מתאריך: 16.07.02
הודעות: 6,814
Facebook profile
לגבי ההשהייה שביקשת:
בתגובה להודעה מספר 1 שנכתבה על ידי shasho שמתחילה ב "RANDOM בשפת c++"

המון מתכנתים מתחילים עושים בתוכנה שלהם לולאה אינסופית(עד שמגיע תנאי סגירת התוכנית)
ובכדי ליצור אפקט של השהייה הם פשוט עושים




קוד:
delay(X);




זה לא נחוץ ואף מיותר. הדרך הנוחה לעבוד עם תהליכים שמתעדכנים כל X שניות היא פשוט
ליצור אובייקט שייצג את התהליך שלנו ויהיה בו ממשק נוח שדרכו נוכל לשלוט ולפקח על התהליך.
הרעיון המרכזי הוא ליצור מחלקה שתייצג תהליך. למחלקה כמה פונקציות ומשתנים עיקריים.

הכנתי לך מחלקה בסיסית שתראה לך את העקרונות, היא לא בנויה בצורה הכי טובה, אבל היא בנויה בצורה ברורה.

משתנים:
m_iUpdate => משתנה המייצג את הפרשי הזמן בין עדכון לעדכון.
m_iData => משתנה שמייצג את הנתון של האובייקט. כאן בחרתי באופן אקראי בזה. אתה יכול לשנות
את זה למה שאתה רוצה.

פונקציות:
CProcess => פונקצייה מסוג בנאי. נותנת ערך התחלתי למשתנה m_iData ובוחרת את זמן העדכון.
pmf_updateObj => פונקצייה פרטית שמעדכנת את האובייקט.
getData => פונקצייה המחזירה את ערכו של משתנה m_iData. כמובן שגם כאן אתה יכול לשנות למה שאתה רוצה.
check => זאת הפונקצייה שכעקרון מפקחת ובודקת מתי על המשתנה להתעדכן. היא פשוט מכריזה
בהתחלה על המשתנה lastUpdateTime(שים לב! משתנה סטטי). ובודקת כל פעם אם צריך עדכון
לפי התנאי הבא - אם זמן נוכחי גדול או שווה ( m_iUpdate + lastUpdateTime )
במידה וכן הפונקצייה תקרא לפונקצייה pmf_updateObj ותחזיר 'אמת'. במידה ולא, הפונקצייה תחזיר 'שקר'.

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

הנה דוגמה לקוד לתוכנית דוגמה:




קוד:
#include <iostream.h> #include <time.h> // // Class: CProcess // class CProcess { private: int m_iUpdate, m_iData; bool pmf_updateObj(); public: CProcess(int t_sec = 5) { m_iUpdate = t_sec; m_iData = 0;} bool check(); int getData(); ~CProcess() {} }; bool CProcess::pmf_updateObj() { ++m_iData; return true; } bool CProcess::check() { static long lastUpdateTime = time(NULL); if( time(NULL) >= (lastUpdateTime+m_iUpdate) ) { lastUpdateTime = time(NULL); pmf_updateObj(); return true; } return false; } int CProcess::getData() { return m_iData; } // // main // int main(void) { CProcess objP1(1); while(objP1.getData() < 5) { if(objP1.check()) { cout << "object's status: " << objP1.getData() << endl; } else { cout << "."; } } return 0; }






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

טוב, מכאן אני מקווה שתסתדר לבד.

הערה I: כל זה תקף רק כאשר אתה מתכנת תחת dos. בwindows אין צורך לעשות את זה ידנית.
הערה II: אתה יכול לשפר את המחלקה עוד ועוד, דבר ראשון על ידי כך שתשנה את העדכון של השניות לעשכון של מילי-שניות.
הערה III: כמובן שאתה יכול להשתמש בכמה תהליכים במקביל.


מקווה שלמדת משהו מזה.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 23:23

הדף נוצר ב 0.15 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר