vb编译了多媒体计时器后出错,timepro里面只有文件的操作语句

elfgirl 2004-10-09 05:33:44
调用多媒体计时器,lTimeID = timeSetEvent(10, 0, AddressOf TimeProc, 1, 1)
Sub TimeProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, _
ByVal dw1 As Long, ByVal dw2 As Long)
On Error Resume Next
Form1.CommonDialog1.Action = 1
Form1.txtNoteEdit.Text = ""
Open Form1.CommonDialog1.FileName For Input As #1
If Err.Number = 0 Then
Do While Not EOF(1)
Line Input #1, inputdata
Form1.txtNoteEdit.Text = Form1.txtNoteEdit.Text + inputdata + Chr(13) + Chr(10)
Loop
Close #1
End If
End Sub
Sub EndCount()
timeKillEvent lTimeID
End Sub
我记得看到一个帖子,也是出现这个问题。是不是timepro里面不能写open 语句,那我应该怎么存储我的数据。谢谢大家
...全文
269 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
elfgirl 2004-10-18
  • 打赏
  • 举报
回复
你编译成可执行文件就不可以了
a达哥a 2004-10-17
  • 打赏
  • 举报
回复
我运行都好的啊
elfgirl 2004-10-17
  • 打赏
  • 举报
回复
为什么每次问题问到一定程度,还没解决的时候就没人回答了。是不是又这样不了了之了。大家帮帮忙吧,我实在不知道怎么解决了。
northwolves 2004-10-15
  • 打赏
  • 举报
回复
你大约共有多少数据?实在不行,就最后关闭多媒体定时器后再一次性保存入文件
supergreenbean 2004-10-15
  • 打赏
  • 举报
回复
里面不能用open地……
elfgirl 2004-10-15
  • 打赏
  • 举报
回复
具体怎么做?我看到vc中是这样做的,存入buffer中。可是在vb 中我不会呀。而且也要至少2个线程吧。帮我写一段代码吧。谢谢
supergreenbean 2004-10-15
  • 打赏
  • 举报
回复
一个程序写入缓存,另一个程序读取缓存……
elfgirl 2004-10-15
  • 打赏
  • 举报
回复
很多。采集振动的加速度、速度和幅值。每1ms取一个数据,要采集很长时间的。这样数据会很大的。光一秒内就有一千个数据呢。没有数组那么大,一次能存储这么多的数据。另外多媒体及时器用的时间越长,采集的速度越慢。最后好像走不动了似的。
能不能每采1000个数据就endcount一次,发出一个flag=true。在timepro外面执行保存数据的代码。存完数据后再调用多媒体及时器取数据。但是在哪里写再调用多媒体计时器的代码呢?
多媒体及时器里面存入数据库的代码不崩溃,只是存数据库耽误时间,更是使多媒体计时器取不到1ms。麻烦您有空的时候帮我想想,谢谢
elfgirl 2004-10-14
  • 打赏
  • 举报
回复
还是不行。执行到If k = 1000 Then这句就出错。麻烦你帮我再想想。是不是里面不能用open
northwolves 2004-10-14
  • 打赏
  • 举报
回复
试试

'bas:

Option Explicit

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 Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public lTimeID As Long, k As Long
Public a(1 To 1000) As String
Public Sub TimeProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, _
ByVal dw1 As Long, ByVal dw2 As Long)
k = k + 1
Form1.Caption = a(k)
If k = 1000 Then
Open "d:\temp.txt" For Binary As #1
Put #1, LOF(1) + 1, Join(a, vbCrLf) & vbCrLf
Close #1
k = 0
End If
PostMessage Form1.hwnd, uMsg, dwUser, ByVal 0
End Sub
Public Sub EndCount()
If lTimeID <> 0 Then timeKillEvent lTimeID
End Sub

Public Sub makeaTimer(Interval As Long)
If lTimeID <> 0 Then timeKillEvent lTimeID
lTimeID = timeSetEvent(Interval, 0, AddressOf TimeProc, 1, 1)
End Sub


'form1:

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Dim i As Integer
Private Sub Command1_Click()
makeaTimer 1
End Sub
Private Sub Command2_Click()
EndCount
End Sub

Private Sub Command3_Click()
ShellExecute hwnd, "open", "d:\temp.txt", vbNullString, vbNullString, 5
End Sub

Private Sub Form_Load()
For i = 1 To 1000
a(i) = i
Next
End Sub
elfgirl 2004-10-13
  • 打赏
  • 举报
回复
to:northwolves(狼行天下) 我想在将数据存入文件后接着再调用回调函数,应该在哪里写呢。我现在是放一个timer在上面,设置其interval为1ms。循环判断回调函数是不是完成,就是在If k = 10000 Then EndCount后面加上flag=true。这样调用行吗?是不是回调函数不能再调用回调函数。应该怎么办?
我就是想在采集1000个数据后存入文件,然后再调用多媒体定时器接着采集,如此循环。现在不知道应该怎么循环调用多媒体记时器。谢谢
northwolves 2004-10-12
  • 打赏
  • 举报
回复
奇怪,编译后还是 VB崩溃,有空再看看:


bas:
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 Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public lTimeID As Long, k As Long
Public a(10000) As String
Sub TimeProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, _
ByVal dw1 As Long, ByVal dw2 As Long)
k = k + 1
Form1.Caption = a(k)
If k = 10000 Then EndCount
PostMessage Form1.hwnd, uMsg, dwUser, ByVal 0
End Sub
Sub EndCount()
timeKillEvent lTimeID
End Sub

form1:


Private Sub Command1_Click()
lTimeID = timeSetEvent(10, 0, AddressOf TimeProc, 1, 1) '调用多媒体触发器函数
End Sub
Private Sub Command2_Click()
EndCount
End Sub

Private Sub Form_Load()
For i = 0 To 10000
a(i) = i i
Next
End Sub



存数据的方法最快的还是数组,写入数组,最后一次性写进文件。BINARY 方式快些。

youwenti 2004-10-12
  • 打赏
  • 举报
回复
怎么发新贴?在哪?求大家了,小弟第一次来!!!!
elfgirl 2004-10-12
  • 打赏
  • 举报
回复
谢谢。麻烦有空的时候帮俺看看。
elfgirl 2004-10-12
  • 打赏
  • 举报
回复
northwolves(狼行天下) 帮俺看了没有呀。大家想想,还有其他的存储方式吗?哪种存数据的方法最快?文件的存储除了open之类的语句还有其他的语句吗?谢谢
elfgirl 2004-10-11
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
lTimeID = timeSetEvent(10, 0, AddressOf TimeProc, 1, 1) '调用多媒体触发器函数
End Sub
Private Sub Command2_Click()
EndCount
End Sub
下面的是在module1里的代码:
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 Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public lTimeID As Long
Sub TimeProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, _
ByVal dw1 As Long, ByVal dw2 As Long)
PostMessage m_hWnd, m_Msg, uID, ByVal 0
Open "f:\\1.txt" For Input As #1
If Err.Number = 0 Then
Line Input #1, inputdata
Form1.Print inputdata
Close #1
End If
End Sub
Sub EndCount()
timeKillEvent lTimeID
End Sub
谢谢
supergreenbean 2004-10-11
  • 打赏
  • 举报
回复
timeSetEvent函数里面使用了多线程好像……
northwolves 2004-10-10
  • 打赏
  • 举报
回复
贴出你的完整代码,俺帮你看看
elfgirl 2004-10-10
  • 打赏
  • 举报
回复
我在timepro中加入了一句PostMessage m_hWnd, m_Msg, uID, ByVal 0,生成可执行文件后还是不行。大家都跑哪里去了,也不帮帮俺。
elfgirl 2004-10-10
  • 打赏
  • 举报
回复
PostMessage不会用呢。看了半天都是英文的,有没有简单的代码。而且用了之后能否保证打包后不出问题。有没有好办法呢
加载更多回复(7)

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧