Results 1 to 10 of 10

Thread: only two of four timer (counters) are working

  1. #1

    only two of four timer (counters) are working

    perhaps this can be a problem or a bug in current thinbasic issue:

       ' Empty GUI script created on 03-06-2013 05:48:22 by  (thinAir)
     
    
     Uses "UI", "console"' -- ID numbers of controls
     Begin ControlID
       %lTimer1   
       %lTimer2   
       %lTimer3   
       %lTimer4   
       %Timer1   
       %Timer2   
       %Timer3  
       %Timer4
     End ControlID    
       
       
     Begin Const
       %MAIN_WIDTH   = 320
       %MAIN_HEIGHT  = 240
       %Time = 1
       %SleepTime = 500
     End Const
     Global Counter1 As DWord
     Global Counter2 As DWord
     Global Counter3 As DWord
     Global Counter4 As DWord
       
     ' -- Create dialog here
     Function TBMain()
       Local hDlg As DWord
       
       
       Dialog New Pixels, 0, "only 2 of 4 timer are working!",-1,-1, %MAIN_WIDTH, %MAIN_HEIGHT, _
                     %WS_POPUP Or %WS_VISIBLE Or %WS_CAPTION Or %WS_SYSMENU Or %WS_MINIMIZEBOX To hDlg
       Dialog Show Modal hDlg, Call cbDialog
       
       
     End Function
       
       
     ' -- Callback for dialog
     CallBack Function cbDialog()
       
       
       ' -- Test for messages
       Select Case CBMSG
       
       
         Case %WM_INITDIALOG
         ' -- Place controls here
           Control Add Label, CBHNDL, %lTimer1, "?", 10,10, 100, 25
           Dialog Set Timer   CBHNDL, %Timer1 , %Time
            
           Control Add Label, CBHNDL, %lTimer2, "?", 10,40, 100, 25
           Dialog Set Timer   CBHNDL, %Timer2 , %Time
            
           Control Add Label, CBHNDL, %lTimer3, "", 10,80, 100, 25
           Dialog Set Timer   CBHNDL, %Timer3 , %Time
       
           Control Add Label, CBHNDL, %lTimer4, "", 10,120, 100, 25
           Dialog Set Timer   CBHNDL, %Timer4 , %Time
       
         Case %WM_TIMER
           Select Case CBCTL
           
             Case %Timer1
               Dialog Kill Timer CBHNDL, %Timer1
                 Incr Counter1
                 Sleep %SleepTime
                 Control Set Text CBHNDL,%lTimer1,Counter1
               Dialog Set Timer CBHNDL, %Timer1, %Time
            
             Case %Timer2
              Dialog Kill Timer CBHNDL, %Timer2
               Incr counter2
               Sleep %SleepTime
               Control Set Text CBHNDL,%lTimer2,Counter2
             Dialog Set Timer CBHNDL, %Timer2, %Time
    
             Case %Timer3
               Dialog Kill Timer CBHNDL, %Timer3
                 Incr Counter3
                 Sleep %SleepTime
                 Control Set Text CBHNDL,%lTimer3,Counter3
               Dialog Set Timer CBHNDL, %Timer3, %Time
              
             Case %Timer4
               Dialog Kill Timer CBHNDL, %Timer4
                 Incr Counter4
                 Sleep %SleepTime
                 Control Set Text CBHNDL,%lTimer4,Counter4
               Dialog Set Timer CBHNDL, %Timer4, %Time
           
           End Select
       
       
         Case %WM_CLOSE
           Dialog Kill Timer CBHNDL, %Timer1
           Dialog Kill Timer CBHNDL, %Timer2   
           Dialog Kill Timer CBHNDL, %Timer3
           Dialog Kill Timer CBHNDL, %Timer4
           Dialog End CBHNDL
       
       
       End Select
     End Function
    
    notice: tested under: win xp service pack 3

    linked info from:
    http://www.thinbasic.com/community/s...8117#post88117

    bye, largo
    Last edited by largo_winch; 06-03-2013 at 20:20.

  2. #2
    Super Moderator Petr Schreiber's Avatar
    Join Date
    Aug 2005
    Location
    Brno - Czech Republic
    Posts
    7,128
    Rep Power
    732
    Hi Largo_Winch,

    on my PC and with thinBasic 1.9.3.0 everything works correctly - all 4 labels get updated.


    Petr
    Learn 3D graphics with ThinBASIC, learn TBGL!
    Windows 10 64bit - Intel Core i5-3350P @ 3.1GHz - 16 GB RAM - NVIDIA GeForce GTX 1050 Ti 4GB

  3. #3
    thanks for testing, petr, but if you are killing the timer ('Dialog Kill Timer CBHNDL, %Timer1..), how that can run? that's a mistery for me

    only this can work for me: I have desactivated in callback function below %WM_TIMER all

    'Dialog Kill Timer CBHNDL, %Timer1
    
    and all timers are working now.

       ' Empty GUI script created on 03-07-2013 05:48:22 by  (thinAir)
     
    
     Uses "UI", "console"' -- ID numbers of controls
     Begin ControlID
       %lTimer1   
       %lTimer2   
       %lTimer3   
       %lTimer4
       %lTimer5   
       %Timer1   
       %Timer2   
       %Timer3  
       %Timer4
       %Timer5
       %Timer6
     End ControlID    
       
       
     Begin Const
       %MAIN_WIDTH   = 320
       %MAIN_HEIGHT  = 240
       %Time = 1
       %SleepTime = 500
     End Const
     Global Counter1 As DWord
     Global Counter2 As DWord
     Global Counter3 As DWord
     Global Counter4 As DWord
     Global Counter5 As DWord
       
     ' -- Create dialog here
     Function TBMain()
       Local hDlg As DWord
       
       
       Dialog New Pixels, 0, "all 4 timer(s) are working!",-1,-1, %MAIN_WIDTH, %MAIN_HEIGHT, _
                     %WS_POPUP Or %WS_VISIBLE Or %WS_CAPTION Or %WS_SYSMENU Or %WS_MINIMIZEBOX To hDlg
       Dialog Show Modal hDlg, Call cbDialog
       
       
     End Function
       
       
     ' -- Callback for dialog
     CallBack Function cbDialog()
       
       
       ' -- Test for messages
       Select Case CBMSG
       
       
         Case %WM_INITDIALOG
         ' -- Place controls here
           Control Add Label, CBHNDL, %lTimer1, "a", 10,10, 100, 25
           Dialog Set Timer   CBHNDL, %Timer1 , %Time
            
           Control Add Label, CBHNDL, %lTimer2, "b", 10,40, 100, 25
           Dialog Set Timer   CBHNDL, %Timer2 , %Time
            
           Control Add Label, CBHNDL, %lTimer3, "c", 10,80, 100, 25
           Dialog Set Timer   CBHNDL, %Timer3 , %Time
       
           Control Add Label, CBHNDL, %lTimer4, "d", 10,120, 100, 25
           Dialog Set Timer   CBHNDL, %Timer4 , %Time
            
           Control Add Label, CBHNDL, %lTimer5, "e", 10,120, 100, 25
           Dialog Set Timer   CBHNDL, %Timer5 , %Time
       
         Case %WM_TIMER
           Select Case CBCTL
           
             Case %Timer1
               'Dialog Kill Timer CBHNDL, %Timer1 ' that you needed for correct timer running?
    
                 Incr Counter1
                 Sleep %SleepTime
                 Control Set Text CBHNDL,%lTimer1,Counter1
                 'PrintL "counter1: " + Str$(Counter1)
               Dialog Set Timer CBHNDL, %Timer1, %Time
                
                
             Case %Timer2
              'Dialog Kill Timer CBHNDL, %Timer2
               Incr counter2
               Sleep %SleepTime
               Control Set Text CBHNDL,%lTimer2,Counter2
              Dialog Set Timer CBHNDL, %Timer2, %Time
               
             Case %Timer3
               'Dialog Kill Timer CBHNDL, %Timer3
                 Incr Counter3
                 Sleep %SleepTime
                 Control Set Text CBHNDL,%lTimer3,Counter3
               Dialog Set Timer CBHNDL, %Timer3, %Time
              
             Case %Timer4
               'Dialog Kill Timer CBHNDL, %Timer4
                 Incr Counter4
                 Sleep %SleepTime
                 Control Set Text CBHNDL,%lTimer4,Counter4
               Dialog Set Timer CBHNDL, %Timer4, %Time
              
             Case %Timer5
               'Dialog Kill Timer CBHNDL, %Timer5
                 Incr Counter5
                 Sleep %SleepTime
                 Control Set Text CBHNDL,%lTimer5,Counter5
               Dialog Set Timer CBHNDL, %Timer5, %Time
           
           End Select
       
       
         Case %WM_CLOSE
           Dialog Kill Timer CBHNDL, %Timer1
           Dialog Kill Timer CBHNDL, %Timer2   
           Dialog Kill Timer CBHNDL, %Timer3
           Dialog Kill Timer CBHNDL, %Timer4
           Dialog End CBHNDL
       
       
       End Select
     End Function
     
    
     
    
     'WaitKey
    
    bye, largo
    Last edited by largo_winch; 07-03-2013 at 11:34.

  4. #4
    powerbasic example (with a big help from my uncle frank!) as a proof works with correct killing timer below %WM_TIMER for three times:

       'Compilable Example:
     #COMPILE EXE
     #DIM ALL
     %Unicode=1
     #INCLUDE "Win32API.inc"
     %ID_Timer   = 200
     %ID_Timer2  = 201
     %ID_Timer3  = 202
     
    
     %bID_Timer  = 301
     %bID_Timer2 = 302
     %bID_Timer3 = 303
     
    
     %Time       = 1
     %SleepTime  = 500
     
    
     %pause      = 600
     %continue   = 601
     %graphic    = 602
     
    
     GLOBAL hDlg AS DWORD, Continue AS LONG
     GLOBAL counter1 AS LONG, counter2 AS LONG,counter3 AS LONG
     
    
     FUNCTION PBMAIN () AS LONG
        DIALOG NEW PIXELS, 0, "Box Animation+Timers",,, 360,300, %WS_OVERLAPPEDWINDOW TO hDlg
        CONTROL ADD BUTTON, hDlg, %pause, "Pause", 140,10,70,20
        CONTROL ADD BUTTON, hDlg, %continue, "Continue", 230,10,70,20
        CONTROL ADD GRAPHIC, hDlg, %graphic, "", 10,40,340,250, %WS_BORDER
    
        GRAPHIC ATTACH hDlg, %graphic
        DIALOG SHOW MODAL hDlg, CALL DlgProc
     END FUNCTION
     
    
     CALLBACK FUNCTION DlgProc() AS LONG
        SELECT CASE CB.MSG
           CASE %WM_INITDIALOG
                 SetTimer(hDlg, %ID_Timer, %pause, BYVAL %NULL) : Continue = 1
                 CONTROL ADD LABEL, hDlg, %bID_Timer, "", 10,10, 20, 25
                 CONTROL ADD LABEL, hDlg, %bID_Timer2, "", 40,10, 20, 25
                 CONTROL ADD LABEL, hDlg, %bID_Timer3, "", 80,10, 20, 25
                 'SetTimer(hDlg, %ID_Timer2, %pause, BYVAL %NULL) : Continue = 1
           CASE %WM_COMMAND
              SELECT CASE CB.CTL
                 CASE %pause : Continue = 0
    
                 CASE %continue : Continue = 1
              END SELECT
           CASE %WM_TIMER
     
    
               KillTimer CBHNDL, %ID_Timer
                 INCR Counter1
                 SLEEP %SleepTime
                 CONTROL SET TEXT CBHNDL,%bID_Timer,STR$(Counter1)
               SetTimer( CBHNDL, %ID_TIMER, %Time)
     
    
               KillTimer CBHNDL, %ID_Timer2
                 INCR Counter2
                 SLEEP %SleepTime
                 CONTROL SET TEXT CBHNDL,%bID_Timer2,STR$(Counter2)
               SetTimer( CBHNDL, %ID_TIMER2, %Time)
     
    
               KillTimer CBHNDL, %ID_Timer3
                 INCR Counter3
                 SLEEP %SleepTime
                 CONTROL SET TEXT CBHNDL,%bID_Timer3,STR$(Counter3)
               SetTimer( CBHNDL, %ID_TIMER3, %Time)
     
    
           IF Continue THEN MoveBox
              DIALOG SET TEXT hDlg, "Box Animation   " + TIME$
           CASE %WM_DESTROY
              KillTimer CB.HNDL, %ID_Timer
              KillTimer CB.HNDL, %ID_Timer2
              KillTimer CB.HNDL, %ID_Timer3
        END SELECT
     END FUNCTION
     
    
     SUB MoveBox
        LOCAL x,y AS LONG
        GRAPHIC CLEAR
        x = RND(40,300) : y = RND(40,210)
        GRAPHIC BOX (x,y)-(x+30,y+30),,%BLUE,%GREEN
     END SUB
    
    bye, largo

  5. #5
    thinBasic MVPs
    Join Date
    Oct 2012
    Location
    Germany
    Age
    54
    Posts
    1,530
    Rep Power
    171
    I know it's not thinBasic, just something I experienced with it, in your code (lines 49++) I read this:
    (Case followed by colon and another statement on one line)

    ' ...    
             SELECT CASE CB.CTL
                CASE %pause : Continue = 0
     
                CASE %continue : Continue = 1
            END SELECT
    ' ...
    
    which sometimes does not work in thinBasic. If you port this script do not write "Case Expression : Statement" on one line to be on the safe side. Otherwise the variable "Continue" might never change its value.
    I think there are missing some Forum-sections as beta-testing and support

  6. #6
    Super Moderator Petr Schreiber's Avatar
    Join Date
    Aug 2005
    Location
    Brno - Czech Republic
    Posts
    7,128
    Rep Power
    732
    Hi Largo_Winch,

    thanks for testing, petr, but if you are killing the timer ('Dialog Kill Timer CBHNDL, %Timer1..), how that can run? that's a mistery for me
    There is no mystery involved. Timer causes the dialog to receive WM_TIMER event, with timer ID passed in CBCTL parameter.

    You never know, how long the code in the handling of WM_TIMER will execute, so it is good to disable the timer on the start (KILL) and restart it on the end (SET). It is perfectly legal, it just prevents firing another tick of the timer in the meantime.


    Petr
    Learn 3D graphics with ThinBASIC, learn TBGL!
    Windows 10 64bit - Intel Core i5-3350P @ 3.1GHz - 16 GB RAM - NVIDIA GeForce GTX 1050 Ti 4GB

  7. #7
    ok thanks petr, but my problem is still the same as in my first post:
    if I use "Dialog Kill Timer CBHNDL, %Timer1" in %WM_TIMER section my example doesn't run correct. If I am desactivating this line everything is working. but original (like powerbasic example shows this example all timers are working on my machine very fine !) I have to work with "Dialog Kill Timer CBHNDL, %TIMER1". can you provide me with your running solution and show it for me at the board? I suppose it's a software "timer" bug under win xp not a hardware problem.

    bye, largo

  8. #8
    thinBasic MVPs
    Join Date
    May 2007
    Location
    UK
    Posts
    1,427
    Rep Power
    159
    It would seem it doesn't matter how many times I tell people to NOT use the sleep command inside ui they continue to ignore the fact windows will continue to send timer events to the message queue while the thinbasic is asleep.
    Home Desktop : Windows 7 - Intel Pentium (D) - 3.0 Ghz - 2GB - Geforce 6800GS
    Home Laptop : WinXP Pro SP3 - Intel Centrino Duo - 1.73 Ghz - 2 GB - Intel GMA 950
    Home Laptop : Windows 10 - Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz, 2401 Mhz, 2 Core(s), 4 Logical Processor(s) - 4 GB - Intel HD 4400
    Work Desktop : Windows 10 - Intel I7 - 4 Ghz - 8GB - Quadro Fx 370

  9. #9
    mike, this example it's taken from your own post here! from this example I've place sleep and "dialog kill timer" infos for my example ! so you have to correct yourself and fixed the example, see info in my first post

    linked info from:
    http://www.thinbasic.com/community/s...8117#post88117

    Try this code and see what results you get it shows an important thing  about timers and why you should kill the timer while processing it.   Play with %SleepTime to see what happens.
    
    
    Uses "UI"' -- ID numbers of controls Begin ControlID %lTimer1 %lTimer2 %lTimer3 %Timer1 %Timer2 %Timer3 End ControlID Begin Const %MAIN_WIDTH = 320 %MAIN_HEIGHT = 240 %Time = 1 %SleepTime = 500 End Const Global Counter1 As DWord Global Counter2 As DWord Global Counter3 As DWord ' -- Create dialog here Function TBMain() Local hDlg As DWord Dialog New Pixels, 0, "<Enter title here>",-1,-1, %MAIN_WIDTH, %MAIN_HEIGHT, _ %WS_POPUP Or %WS_VISIBLE Or %WS_CAPTION Or %WS_SYSMENU Or %WS_MINIMIZEBOX To hDlg Dialog Show Modal hDlg, Call cbDialog End Function ' -- Callback for dialog CallBack Function cbDialog() ' -- Test for messages Select Case CBMSG Case %WM_INITDIALOG ' -- Place controls here Control Add Label, CBHNDL, %lTimer1, "", 10,10, 100, 25 Dialog Set Timer CBHNDL, %Timer1 , %Time Control Add Label, CBHNDL, %lTimer2, "", 10,40, 100, 25 Dialog Set Timer CBHNDL, %Timer2 , %Time Control Add Label, CBHNDL, %lTimer3, "", 10,80, 100, 25 Dialog Set Timer CBHNDL, %Timer3 , %Time Case %WM_TIMER Select Case CBCTL Case %Timer1 Dialog Kill Timer CBHNDL, %Timer1 Incr Counter1 Sleep %SleepTime Control Set Text CBHNDL,%lTimer1,Counter1 Dialog Set Timer CBHNDL, %Timer1, %Time Case %Timer2 Incr counter2 Sleep %SleepTime Control Set Text CBHNDL,%lTimer2,Counter2 Case %Timer3 Dialog Kill Timer CBHNDL, %Timer3 Incr Counter3 Sleep %SleepTime Control Set Text CBHNDL,%lTimer3,Counter3 Dialog Set Timer CBHNDL, %Timer3, %Time End Select Case %WM_CLOSE Dialog Kill Timer CBHNDL, %Timer1 Dialog Kill Timer CBHNDL, %Timer2 Dialog Kill Timer CBHNDL, %Timer3 Dialog End CBHNDL End Select End Function
    It would seem it doesn't matter how many times I tell people to NOT use the sleep command inside ui they continue to ignore the fact windows will continue to send timer events to the message queue while the thinbasic is asleep.
    I can only learn about thinbasic example and timer stuff there's at the forum board or from ui/sample folders.

    perhaps somebody can show correct timer example for my first post and question.

    bye, largo
    Last edited by largo_winch; 09-03-2013 at 11:46.

  10. #10
    thinBasic MVPs
    Join Date
    May 2007
    Location
    UK
    Posts
    1,427
    Rep Power
    159
    If you read the whole thread you can see I was explaining why you shouldn't use sleep and said

    This should result in an extra 150ish calls while you are asleep
    Try this code and see what results you get it shows an important thing about timers and why you should kill the timer while processing it. Play with %SleepTime to see what happens.
    Perhaps I should put "don't use this script as it is an example of how not to do it."

    bye mike
    Home Desktop : Windows 7 - Intel Pentium (D) - 3.0 Ghz - 2GB - Geforce 6800GS
    Home Laptop : WinXP Pro SP3 - Intel Centrino Duo - 1.73 Ghz - 2 GB - Intel GMA 950
    Home Laptop : Windows 10 - Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz, 2401 Mhz, 2 Core(s), 4 Logical Processor(s) - 4 GB - Intel HD 4400
    Work Desktop : Windows 10 - Intel I7 - 4 Ghz - 8GB - Quadro Fx 370

Similar Threads

  1. timer example :)
    By Lionheart008 in forum Sources, Templates, Code Snippets, Tips and Tricks, Do you know ...
    Replies: 1
    Last Post: 24-01-2010, 12:35
  2. timer countdown UI
    By Lionheart008 in forum UI (User Interface)
    Replies: 1
    Last Post: 08-01-2010, 21:06
  3. Interesting counters
    By ErosOlmi in forum General
    Replies: 3
    Last Post: 17-06-2009, 23:49
  4. TIMER advice
    By catventure in forum thinBasic General
    Replies: 2
    Last Post: 13-12-2005, 18:34

Members who have read this thread: 0

There are no members to list at the moment.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •