B4J Question How to do Substitute of SLEEP(xxx) function

Discussion in 'B4J Questions' started by petr4ppc, Jan 27, 2015.

  1. petr4ppc

    petr4ppc Active Member Licensed User

    Dear friends, please for advice,

    I am using loop
    Code:
    Do
    callsubtask1
    sleep(
    2000)
    callsubtask2
    sleep(
    2000)
    callsubtask3
    sleep(
    2000)
    Loop
    But I am checking if I click on the button. But because I am using SLEEP(2000) function, then after clicking button in app, then Windows is writing something like this: THE APP IS NOT REACTING, app Window is white (disabled), but the program is still running....

    Please how can I do substitute od sleep(2000) function?
    Thank you very much
    p4ppc
     
  2. derez

    derez Expert Licensed User

    Code:
    Sub Process_Globals
        
    Private fx As JFX
        
    Private MainForm As Form
        
    Dim tmr As Timer
        
    Dim count As Int
    End Sub

    Sub AppStart (Form1 As Form, Args() As String)
        MainForm = Form1
        
    'MainForm.RootPane.LoadLayout("Layout1") 'Load the layout file.
        MainForm.Show
        tmr.Initialize(
    "tmr",2000)
        count = -
    1
        tmr.Enabled = 
    true
    End Sub

    Sub tmr_tick
    count = (count+
    1)Mod 3
    Select count
        
    Case 0
            callsubtask1
        
    Case 1
            callsubtask2
        
    Case 2
            callsubtask3
    End Select
    End Sub
     
    Last edited: Jan 27, 2015
  3. petr4ppc

    petr4ppc Active Member Licensed User

    DEREZ - THANK YOU VERY MUCH, VERY NICE SOLUTION.

    Please onlz one question to this theme -

    And in next example? How can I substitute each sleep(xxx) order for good running of the app, please very much?

    Code:
    sub callsubtask1
    ' do something
      sleep(2000)
    ' do something
    sleep(1000)
    callsubtask2
    End sub

    sub callsubtask2
    ' do something
    sleep(3000)
    ' do something
    sleep(1500)
    call subtask1
    End sub
    Thank you for your help
    p4ppc
     
    Last edited: Jan 27, 2015
  4. derez

    derez Expert Licensed User

    The following is more general, using 4 timers for the 4 times you have.
    Please look at my Multitimer class, it was written with similar case in my mind.
    http://www.b4x.com/android/forum/threads/multitimer-class.42610/

    Code:
    sub Process_Globals
        
    Private fx As JFX
        
    Private MainForm As Form
        
    Dim tmr1,tmr2,tmr3,tmr4 As Timer
    End Sub

    Sub AppStart (Form1 As Form, Args() As String)
        MainForm = Form1
        
    'MainForm.RootPane.LoadLayout("Layout1") 'Load the layout file.
        MainForm.Show
        tmr1.Initialize(
    "tmr",2000)
        tmr2.Initialize(
    "tmr",1000)
        tmr3.Initialize(
    "tmr",3000)
        tmr4.Initialize(
    "tmr",1500)

        tmr1.Enabled = 
    False
        tmr2.Enabled = 
    False
        tmr3.Enabled = 
    False
        tmr4.Enabled = 
    False
        tmr4_tick
    End Sub

    Sub tmr1_tick
    tmr1.Enabled = 
    False
    ' do something
    tmr2.Enabled = True
    End Sub

    Sub tmr2_tick
    tmr2.Enabled = 
    False
    ' do something
    tmr3.Enabled = True
    End Sub

    Sub tmr3_tick
    tmr3.Enabled = 
    False
    ' do something
    tmr4.Enabled = True
    End Sub

    Sub tmr4_tick
    tmr4.Enabled = 
    False
    ' do something
    tmr1.Enabled = True
    End Sub
     
  5. petr4ppc

    petr4ppc Active Member Licensed User

    THANK YOU VERY MUCH DEREZ FOR YOUR HELP
     
  6. netsistemas

    netsistemas Member Licensed User

    Simulate SLEEP:

    In process_globals definie:
    Dim TimerSleep As Timer
    Dim TimerContinue As Boolean

    And this sub:

    private Sub TimerSleep_Tick
    TimerSleep.Enabled = False
    TimerContinue = True
    End Sub


    And in your coude instead of sleep, include this code:


    TimerContinue = False
    TimerSleep.Initialize("TimerSleep", 500)
    TimerSleep.Enabled = True
    Do While TimerContinue = False
    DoEvents
    Loop


    maybe you can include all code in a module or class.

    This code is only an idea, there are not tested.
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice