Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Create really long timers in MFC

Create really long timers in MFC

Scheduled Pinned Locked Moved C / C++ / MFC
c++
21 Posts 8 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C cagespear

    well, actually your point is of great help to me. If it can store 49 days at max then I'll buy that as I only need it max for 24 hours which is considerably lesser. Thanks a ton! Cage

    I Offline
    I Offline
    Iain Clarke Warrior Programmer
    wrote on last edited by
    #6

    Just be very careful - you have a strong risk of wraparound. Have a look at http://blogs.msdn.com/oldnewthing/archive/2005/05/31/423407.aspx[^] for a very useful explanation. Iain.

    Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.

    1 Reply Last reply
    0
    • C cagespear

      I have a requirement in my app where I need to take some action at lets say - 24 hours after the app has opened. Clear case of using timers, but timers take input in "milisecs", is it a nice idea to give timers with very high interval like 24 hours which will come out to be - 24 * 3600 * 100 milisecs. Regards Amit

      C Offline
      C Offline
      CPallini
      wrote on last edited by
      #7

      Well, since the Elapse argument of the SetTimer can take a maximum of USER_TIMER_MAXIMUM (i.e. on my system, 0x7FFFFFFF milliseconds, that is about 25 days) I'm happy with it. Moreover it isn't such a difficult task to make longer intervals using shorter ones. :)

      If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
      This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
      [My articles]

      C 1 Reply Last reply
      0
      • I Iain Clarke Warrior Programmer

        When you start calculating 24 hours in milliseconds (86400000) then you do get big numbers. And 2^32 can only hold 49.7 days, so I think your reluctance is very wise. There are alternative ways though - have a look at SetWaitableTimer. You can also set it to call a function at a certain time / date, so it may be more useful to you. Good luck, Iain.

        Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.

        C Offline
        C Offline
        CPallini
        wrote on last edited by
        #8

        Iain Clarke wrote:

        And 2^32 can only hold 49.7 days

        Actually is the half ;P , see [^]. :-D

        If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
        This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
        [My articles]

        C I 2 Replies Last reply
        0
        • C CPallini

          Well, since the Elapse argument of the SetTimer can take a maximum of USER_TIMER_MAXIMUM (i.e. on my system, 0x7FFFFFFF milliseconds, that is about 25 days) I'm happy with it. Moreover it isn't such a difficult task to make longer intervals using shorter ones. :)

          If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
          This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
          [My articles]

          C Offline
          C Offline
          cagespear
          wrote on last edited by
          #9

          I hear you. I can make small timers, kill them and do 'settimer' repeatedly, but then being a lazy programmer - was thinking of skipping them and just have a one-shot timer :-D -Amit

          C 1 Reply Last reply
          0
          • C CPallini

            Iain Clarke wrote:

            And 2^32 can only hold 49.7 days

            Actually is the half ;P , see [^]. :-D

            If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
            This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
            [My articles]

            C Offline
            C Offline
            cagespear
            wrote on last edited by
            #10

            Still works for me :) hope it doesn't shrink :-D

            1 Reply Last reply
            0
            • K KarstenK

              It is Ok, but you misses a "0". If you have others timers than you better count up. Happy debugging by waiting 24 hours for the function :zzz: :zzz: :zzz:

              Greetings from Germany

              C Offline
              C Offline
              cagespear
              wrote on last edited by
              #11

              Have put the timers now before leaving for weekend, hope eveything works good when I come back on Monday :)

              1 Reply Last reply
              0
              • C cagespear

                I hear you. I can make small timers, kill them and do 'settimer' repeatedly, but then being a lazy programmer - was thinking of skipping them and just have a one-shot timer :-D -Amit

                C Offline
                C Offline
                CPallini
                wrote on last edited by
                #12

                cagespear wrote:

                I can make small timers, kill them and do 'settimer' repeatedly

                Counting isn't an option for you, is it?

                cagespear wrote:

                but then being a lazy programmer

                No. It isn't an option. :-D

                If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                [My articles]

                1 Reply Last reply
                0
                • C cagespear

                  I have a requirement in my app where I need to take some action at lets say - 24 hours after the app has opened. Clear case of using timers, but timers take input in "milisecs", is it a nice idea to give timers with very high interval like 24 hours which will come out to be - 24 * 3600 * 100 milisecs. Regards Amit

                  M Offline
                  M Offline
                  MANISH RASTOGI
                  wrote on last edited by
                  #13

                  You can store datetime when application starts. Set some timer interval and read cureent time each time when receive WM_TIMER message. If the difference between application starting time and current time matches your requirement, take desired action.

                  1 Reply Last reply
                  0
                  • C CPallini

                    Iain Clarke wrote:

                    And 2^32 can only hold 49.7 days

                    Actually is the half ;P , see [^]. :-D

                    If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                    This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                    [My articles]

                    I Offline
                    I Offline
                    Iain Clarke Warrior Programmer
                    wrote on last edited by
                    #14

                    Well, my sums are accurate! If you're going to cheat and read the docs and find that SetTimer can only do 2^31-1, then shame on you! In my defense I was thinking of GetTickCount and wraparound. There are lots of ways of skinning his particular cat. I certainly wouldn't do a 24hr SetTimer - what if people chage the clock? Twice a year that gets done for you, etc... Iain.

                    Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.

                    C 1 Reply Last reply
                    0
                    • I Iain Clarke Warrior Programmer

                      Well, my sums are accurate! If you're going to cheat and read the docs and find that SetTimer can only do 2^31-1, then shame on you! In my defense I was thinking of GetTickCount and wraparound. There are lots of ways of skinning his particular cat. I certainly wouldn't do a 24hr SetTimer - what if people chage the clock? Twice a year that gets done for you, etc... Iain.

                      Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.

                      C Offline
                      C Offline
                      CPallini
                      wrote on last edited by
                      #15

                      Iain Clarke wrote:

                      If you're going to cheat and read the docs and find that SetTimer can only do 2^31-1, then shame on you!

                      Shame on me! :-D

                      Iain Clarke wrote:

                      I certainly wouldn't do a 24hr SetTimer - what if people chage the clock? Twice a year that gets done for you, etc...

                      Do you think the timer would be affected (I really have no clue about but i suppose it shouldn't: it's a timer, not a clock!)?

                      If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                      This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                      [My articles]

                      I R 2 Replies Last reply
                      0
                      • C CPallini

                        Iain Clarke wrote:

                        If you're going to cheat and read the docs and find that SetTimer can only do 2^31-1, then shame on you!

                        Shame on me! :-D

                        Iain Clarke wrote:

                        I certainly wouldn't do a 24hr SetTimer - what if people chage the clock? Twice a year that gets done for you, etc...

                        Do you think the timer would be affected (I really have no clue about but i suppose it shouldn't: it's a timer, not a clock!)?

                        If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                        This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                        [My articles]

                        I Offline
                        I Offline
                        Iain Clarke Warrior Programmer
                        wrote on last edited by
                        #16

                        CPallini wrote:

                        Do you think the timer would be affected

                        I also doubt the timer would be affected - but its usefulness would depend on what the OP is trying to do. If it's "do something approximately a day later", then SetTimer would be fine, or checking GetTickCount on a more rapid timer. If it's "do something at the same time tomorrow, and the user will look at their clock and be puzzled why they started the program at 1pm and it's midday now..." then you need to do it a different way. It really depends on what (s)he's trying to do. Iain.

                        Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.

                        C 1 Reply Last reply
                        0
                        • I Iain Clarke Warrior Programmer

                          CPallini wrote:

                          Do you think the timer would be affected

                          I also doubt the timer would be affected - but its usefulness would depend on what the OP is trying to do. If it's "do something approximately a day later", then SetTimer would be fine, or checking GetTickCount on a more rapid timer. If it's "do something at the same time tomorrow, and the user will look at their clock and be puzzled why they started the program at 1pm and it's midday now..." then you need to do it a different way. It really depends on what (s)he's trying to do. Iain.

                          Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.

                          C Offline
                          C Offline
                          CPallini
                          wrote on last edited by
                          #17

                          Well, timers and alarms are pretty different things, I suppose the OP knows about. But this is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. :rolleyes:

                          If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                          This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                          [My articles]

                          1 Reply Last reply
                          0
                          • C cagespear

                            I have a requirement in my app where I need to take some action at lets say - 24 hours after the app has opened. Clear case of using timers, but timers take input in "milisecs", is it a nice idea to give timers with very high interval like 24 hours which will come out to be - 24 * 3600 * 100 milisecs. Regards Amit

                            Y Offline
                            Y Offline
                            Yves
                            wrote on last edited by
                            #18

                            With this small class you can create a timer up to 1193 Hours #pragma once #include <string> typedef void (*TIMER_PROC)(UINT idEvent, void* obj); class CTimer { public: enum eTIME_TYPE { eONE_SHOT, ePERIOIDIC }; public: //--CONSTRUCTOR------------------------------------- CTimer(eTIME_TYPE _eType, DWORD _dWaitPeriod, TIMER_PROC _pFunct, LPVOID _pSegment); //--DESTRUCTOR-------------------------------------- virtual ~CTimer(); public: //--PUBLIC METHODS---------------------------------- inline const char* GetErrorMessage(){ return m_szError.c_str(); } UINT Start(); void Stop(); bool SetPeriod(DWORD _dwVal); eTIME_TYPE TimerType() { return m_eTimerType; } UINT GetTimerID(); protected: //--PROTECTED ATTRIBUTES---------------------------- TIMER_PROC m_pCALLBACKFUN; void* m_pSegm; eTIME_TYPE m_eTimerType; DWORD m_WaitPeriod; DWORD m_ThreadID; HANDLE m_hQuitEvent; HANDLE m_hThread; HANDLE m_hAdvisorThread; HANDLE m_hAdvise; HANDLE m_hQuitAdvisor; std::string m_szError; private: //--PRIVATE METHODS--------------------------------- static void TimerThread(void* _pParam); static void AdvisorThread(void* _pParam); }; The implementation //--FILE INCLUDES-------------------------------------------------------- #include <windows.h> #include "Timer.h" //!--CONSTRUCTOR----------------------------------------------------------- // // Method Name: CTimer(..., ...., ...) // /*! Notes Constructor. */ //------------------------------------------------------------------------- CTimer::CTimer(eTIME_TYPE _eType, DWORD _dWaitPeriod, TIMER_PROC _pFunct, LPVOID _pSegment) { m_pCALLBACKFUN = NULL; m_pSegm = NULL; m_eTimerType = _eType; m_WaitPeriod = _dWaitPeriod; if( m_WaitPeriod == 0 ) m_WaitPeriod = 1; m_hThread = m_hAdvisorThread = NULL; m_ThreadID=0; m_pCALLBACKFUN = _pFunct; m_pSegm = _pSegment; m_hQuitEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL); m_hQuitAdvisor = ::CreateEvent(NULL, TRUE, FALSE, NULL); m_hAdvise = ::CreateEvent(NULL, FALSE, FALSE, NULL); m_hAdvisorThread = ::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)AdvisorThread, this, 0, 0); } //!--DESTRUCTOR------------------------------------------------------------- // // Method Name: ~CTimer() // /*!

                            1 Reply Last reply
                            0
                            • C cagespear

                              I have a requirement in my app where I need to take some action at lets say - 24 hours after the app has opened. Clear case of using timers, but timers take input in "milisecs", is it a nice idea to give timers with very high interval like 24 hours which will come out to be - 24 * 3600 * 100 milisecs. Regards Amit

                              D Offline
                              D Offline
                              David Crow
                              wrote on last edited by
                              #19

                              cagespear wrote:

                              ...I need to take some action at lets say - 24 hours after the app has opened.

                              What if you created a scheduled task?

                              "Love people and use things, not love things and use people." - Unknown

                              "To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne

                              1 Reply Last reply
                              0
                              • C CPallini

                                Iain Clarke wrote:

                                If you're going to cheat and read the docs and find that SetTimer can only do 2^31-1, then shame on you!

                                Shame on me! :-D

                                Iain Clarke wrote:

                                I certainly wouldn't do a 24hr SetTimer - what if people chage the clock? Twice a year that gets done for you, etc...

                                Do you think the timer would be affected (I really have no clue about but i suppose it shouldn't: it's a timer, not a clock!)?

                                If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                                This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                                [My articles]

                                R Offline
                                R Offline
                                Rajesh R Subramanian
                                wrote on last edited by
                                #20

                                And here as well. :suss:

                                Nobody can give you wiser advice than yourself. - Cicero .·´¯`·->Rajesh<-·´¯`·. Microsoft MVP - Visual C++[^]

                                C 1 Reply Last reply
                                0
                                • R Rajesh R Subramanian

                                  And here as well. :suss:

                                  Nobody can give you wiser advice than yourself. - Cicero .·´¯`·->Rajesh<-·´¯`·. Microsoft MVP - Visual C++[^]

                                  C Offline
                                  C Offline
                                  CPallini
                                  wrote on last edited by
                                  #21

                                  Oh, don't bother too much. Sometimes I'm a bad guy really deserving downvoting. :rolleyes: BTW Thank you friend. :)

                                  If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                                  This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                                  [My articles]

                                  1 Reply Last reply
                                  0
                                  Reply
                                  • Reply as topic
                                  Log in to reply
                                  • Oldest to Newest
                                  • Newest to Oldest
                                  • Most Votes


                                  • Login

                                  • Don't have an account? Register

                                  • Login or register to search.
                                  • First post
                                    Last post
                                  0
                                  • Categories
                                  • Recent
                                  • Tags
                                  • Popular
                                  • World
                                  • Users
                                  • Groups