huaitsai
驱动牛犊
驱动牛犊
  • 注册日期2002-04-02
  • 最后登录2008-03-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3963回复:11

WinCE真的可以做到1msec中断实时real-time吗?

楼主#
更多 发布于:2002-04-11 17:25
WinCE真的可以做到1msec中断实时real-time吗?
huaitsai
驱动牛犊
驱动牛犊
  • 注册日期2002-04-02
  • 最后登录2008-03-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-17 10:56
那除了购买RTOS之外  在WinCE或Win9x甚至Win2000中
有法子得到1msec的实时吗?
huaitsai
驱动牛犊
驱动牛犊
  • 注册日期2002-04-02
  • 最后登录2008-03-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-04-23 17:31
真是不行吗?可是我依下列这个Visual Basic例子在windows98
跑却可以达到1msec  各位可以试试原作者程序也欢迎试试
我更改后的程序:

原作者程序(www.allapi.net):
\'This project requires a Form and a Module
\'On the form, there should be one command button (Command1)
\'and one Timer (Timer1)

\'In the form:
Option Explicit
Private Sub Form_Load()
    \'KPD-Team 2001
    \'URL: http://www.allapi.net/
    \'E-Mail: KPDTeam@Allapi.net
    Command1.Caption = \"Start\"
End Sub
Private Sub Form_Unload(Cancel As Integer)
    \'Stop the timers if they\'re still counting
    timeKillEvent hMMTimer
    Timer1.Enabled = False
End Sub
Private Sub Timer1_Timer()
    \'increment VBTimer
    VBTimer = VBTimer + 1
End Sub
Private Sub Command1_Click()
    If Command1.Caption = \"Start\" Then
        \'Start both timers
        Timer1.Interval = 1
        Timer1.Enabled = True
        hMMTimer = timeSetEvent(1, 0, AddressOf TimerProc, 0, TIME_PERIODIC Or TIME_CALLBACK_FUNCTION)
        Command1.Caption = \"Stop\"
    Else
        \'Stop both timers
        timeKillEvent hMMTimer
        Timer1.Enabled = False
        Command1.Caption = \"Start\"
        \'Show result
        MsgBox \"Timer1_Timer was called \" & VBTimer & \" times;\" & vbNewLine & \"TimerProc was called \" & MMTimer & \" times.\"
        VBTimer = 0
        MMTimer = 0
    End If
End Sub
\'In a module
Option Explicit
Public Const TIME_ONESHOT = 0  \'Event occurs once, after uDelay milliseconds.
Public Const TIME_PERIODIC = 1  \'Event occurs every uDelay milliseconds.
Public Const TIME_CALLBACK_EVENT_PULSE = &H20  \'When the timer expires, Windows calls thePulseEvent function to pulse the event pointed to by the lpTimeProc parameter. The dwUser parameter is ignored.
Public Const TIME_CALLBACK_EVENT_SET = &H10  \'When the timer expires, Windows calls theSetEvent function to set the event pointed to by the lpTimeProc parameter. The dwUser parameter is ignored.
Public Const TIME_CALLBACK_FUNCTION = &H0   \'When the timer expires, Windows calls the function pointed to by the lpTimeProc parameter. This is the default.
Public Declare Function timeKillEvent Lib \"winmm.dll\" (ByVal uID As Long) As Long
Public Declare Function timeSetEvent Lib \"winmm.dll\" (ByVal uDelay As Long, ByVal uResolution As Long, ByVal lpFunction As Long, ByVal dwUser As Long, ByVal uFlags As Long) As Long
Public VBTimer As Long, MMTimer As Long
Public hMMTimer As Long
Sub TimerProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, ByVal dw1 As Long, ByVal dw2 As Long)
    \'Increment MMTimer
    MMTimer = MMTimer + 1
End Sub


我更改后的程序:
\'This project requires a Form and a Module
\'On the form, there should be one command button (Command1)
\'and one Timer (Timer1)
\'and three Text (Text1, Text2, Text3)

\'In the form:
Option Explicit
Private Sub Form_Load()
    \'KPD-Team 2001
    \'URL: http://www.allapi.net/
    \'E-Mail: KPDTeam@Allapi.net
    Command1.Caption = \"Start\"
End Sub
Private Sub Form_Unload(Cancel As Integer)
    \'Stop the timers if they\'re still counting
    timeKillEvent hMMTimer
    Timer1.Enabled = False
End Sub


Private Sub Timer1_Timer()
    \'increment VBTimer
    VBTimer = VBTimer + 1

    Form1.Text1.Text = Time
  
    If oo >= 100000 Then
       oo = 0
    End If
    
End Sub
Private Sub Command1_Click()
    If Command1.Caption = \"Start\" Then
        \'Start both timers
        Timer1.Interval = 100
        Timer1.Enabled = True
        hMMTimer = timeSetEvent(1, 0, AddressOf TimerProc, 0, TIME_PERIODIC Or TIME_CALLBACK_FUNCTION)
        Command1.Caption = \"Stop\"
    Else
        \'Stop both timers
        timeKillEvent hMMTimer
        Timer1.Enabled = False
        Command1.Caption = \"Start\"
        VBTimer = 0
        MMTimer = 0
    End If
End Sub



\'In a module
Option Explicit
Public Const TIME_ONESHOT = 0  \'Event occurs once, after uDelay milliseconds.
Public Const TIME_PERIODIC = 1  \'Event occurs every uDelay milliseconds.
Public Const TIME_CALLBACK_EVENT_PULSE = &H20  \'When the timer expires, Windows calls thePulseEvent function to pulse the event pointed to by the lpTimeProc parameter. The dwUser parameter is ignored.
Public Const TIME_CALLBACK_EVENT_SET = &H10  \'When the timer expires, Windows calls theSetEvent function to set the event pointed to by the lpTimeProc parameter. The dwUser parameter is ignored.
Public Const TIME_CALLBACK_FUNCTION = &H0   \'When the timer expires, Windows calls the function pointed to by the lpTimeProc parameter. This is the default.
Public Declare Function timeKillEvent Lib \"winmm.dll\" (ByVal uID As Long) As Long
Public Declare Function timeSetEvent Lib \"winmm.dll\" (ByVal uDelay As Long, ByVal uResolution As Long, ByVal lpFunction As Long, ByVal dwUser As Long, ByVal uFlags As Long) As Long
Public VBTimer As Long, MMTimer As Long, oo As Long
Public hMMTimer As Long
Public mmclock As Long

Sub TimerProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, ByVal dw1 As Long, ByVal dw2 As Long)
    \'Increment MMTimer
    MMTimer = MMTimer + 1
    oo = oo + 1
    
    If MMTimer = 1000 Then
       mmclock = mmclock + 1
       MMTimer = 0
    End If
    
    Form1.Text2.Text = mmclock
    Form1.Text3.Text = oo
    
    Next
End Sub







游客

返回顶部