דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. תכנה שרצה משעה מסויימת עד שעה אחרת

תכנה שרצה משעה מסויימת עד שעה אחרת

מתוזמן נעוץ נעול הועבר ארכיון code613m
6 פוסטים 3 כותבים 375 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • A מנותק
    A מנותק
    avr416
    כתב ב נערך לאחרונה על ידי
    #1

    בהמשך לקוד שמנטר את הרשת, אני רוצה שהוא ירוץ רק בטווח זמן מסוים. למשל מ20:00 עד 08:00 למחרת. בצורה קבועה כל יום.
    לשם כך חשבתי להשתמש בטיימר, וכתבתי את הקוד הבא:

    public class Scanner
        {       
            private DateTime timeStart { get; set; }
            private DateTime timeStop { get; set; }
           
            private Timer timer = new Timer();
            TimeSpan difference;
    
            public Scanner(DateTime start, DateTime stop)
            {
                timeStart = start;
                timeStop = stop;           
            }
            public void TimeTracking()
            {
                DateTime now = DateTime.Now;
                timer.Enabled = true;
                timer.AutoReset = true;
                //אם עדיין לא הגיע הזמן
                if (now < timeStart)
                {
                    difference = timeStart - now;
                    timer.Interval = difference.Ticks;
                    timer.Elapsed += (s, e) => { StartUpScanner(); TimeTracking(); };
                }
                else if (now >= timeStart && now < timeStop)
                {
                    difference = timeStop - now;
                    timer.Interval = difference.Ticks;
                    timer.Elapsed += (s, e) => { StopScanner(); TimeTracking(); };
                }
                else if (now > timeStart &&now >=timeStop)
                { 
                    //מכוון את הטיימר שיפעל למחרת
                    difference = timeStart.AddDays(1) - now;
                    timer.Interval = difference.Ticks;
                    timer.Elapsed += (s, e) => { StartUpScanner(); TimeTracking(); };
                }
            }
    
            private void StopScanner()
            {
                
            }
    
            private void StartUpScanner()
            {
                
            }
        }
    

    זה אמור לעבוד טוב, נכון?
    או שכדאי לעשות את זה באופן אחר?
    תודה רבה ושבת שלום!
    אברהם.

    פורסם במקור בפורום CODE613 ב20/01/2017 01:49 (+02:00)

    תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #2

      נראה טוב, אך עליך לתקן בדחיפות את ההשמה מticks לinteval. כי האחרוןמקבל מילישניות, ואילו tick הוא לא אלפית השניה אלא מליונית שלה.
      במקום זה תשתמש בTotalMiliseconds.
      בנוסף בתנאי השלישי ההתניה now > timeStart היא כפל מיותר שהרי הוא גדול אף מהסיום, לא כן? החלק השני שלה, אף שהוא גם יוכל להיחשב כמיותר כי הרי זה האפשרות האחרונה, עוד סביר בשביל הקריאות.
      שלישית - עדיף להשתמש בשביל זה בספריות מוכנות... מחר (אולי בשעה זו זה נחשב היום) אחפש - אני זוכר שיש כמה.

      פורסם במקור בפורום CODE613 ב20/01/2017 05:32 (+02:00)

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      2
      • A מנותק
        A מנותק
        avr416
        כתב ב נערך לאחרונה על ידי
        #3

        תודה רבה על ההערות המחכימות!!

        @דוד ל.ט.

        בנוסף בתנאי השלישי ההתניה now > timeStart היא כפל מיותר שהרי הוא גדול אף מהסיום, לא כן? החלק השני שלה, אף שהוא גם יוכל להיחשב כמיותר כי הרי זה האפשרות האחרונה, עוד סביר בשביל הקריאות.

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

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

        פורסם במקור בפורום CODE613 ב20/01/2017 11:17 (+02:00)

        תגובה 1 תגובה אחרונה
        0
        • A מנותק
          A מנותק
          avr416
          כתב ב נערך לאחרונה על ידי
          #4

          אולי התכוונת לזאת?

          פורסם במקור בפורום CODE613 ב20/01/2017 12:20 (+02:00)

          תגובה 1 תגובה אחרונה
          0
          • dovidD מנותק
            dovidD מנותק
            dovid ניהול
            כתב ב נערך לאחרונה על ידי
            #5

            @avr416

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

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

            ספריות התכוונתי אכן לזאת ולדומים לה. אבל לא מספיק עיינתי בעניין.
            תוכל לחפש:
            C# scheduler action משהו כזה ותחפש משהו טוב.

            פורסם במקור בפורום CODE613 ב20/01/2017 12:26 (+02:00)

            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

            בכל נושא אפשר ליצור קשר dovid@tchumim.com

            תגובה 1 תגובה אחרונה
            1
            • clickoneC מנותק
              clickoneC מנותק
              clickone
              כתב ב נערך לאחרונה על ידי
              #6

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

              פורסם במקור בפורום CODE613 ב21/01/2017 21:40 (+02:00)

              אין טסט כמו פרודקשן.

              המייל שלי urivpn@gmail.com

              תגובה 1 תגובה אחרונה
              1

              בא תתחבר לדף היומי!
              • התחברות

              • אין לך חשבון עדיין? הרשמה

              • התחברו או הירשמו כדי לחפש.
              • פוסט ראשון
                פוסט אחרון
              0
              • דף הבית
              • קטגוריות
              • פוסטים אחרונים
              • משתמשים
              • חיפוש
              • חוקי הפורום