timeseteventを使うと正常終了しない

解決


ごつごっつ  2006-10-24 00:36:20  No: 133810

timeseteventを使ってストップウォッチを
作っているのですが、終了時にエラーが
出てしまいます。正常終了する場合もあり
対処にこまっています。

エラーは、様々で、
”問題が発生したため、Visual Basic を終了します。 ご不便をおかけして申し訳ありません。”
”メモリがReadになることはありませんでした”
などです。
VB6.0が異常終了する場合もあります。

OSはWindowsXP、VB6.0です

よろしくお願いします。

以下プログラムです。  フォームプログラム
--
Option Explicit

Private Sub start_button_Click()
  rate = 10
  time_event = timeSetEvent(rate, 1, AddressOf TimeProc, 0, 1)
End Sub

Private Sub stop_button_Click()
  timeKillEvent time_event
End Sub

Private Sub reset_button_Click()
  counter = 0
End Sub

Private Sub exit_button_Click()
  End
End Sub

--
モジュールプログラム

--
Declare Function timeKillEvent Lib "WINMM" (ByVal uID&) As Long
Declare Function timeSetEvent Lib "WINMM" (ByVal uDelay&, ByVal uResolution&, ByVal 

lpFunction&, ByVal dwUser&, ByVal uFlags&) As Long

Public time_event As Long
Public rate As Integer
Public counter As Integer

Public Function TimeProc(ByVal IDEvent As Long, ByVal uReserved As Long, ByVal dwUser As 

Long, ByVal dwReserved1 As Long, ByVal dwReserved2 As Long) As Long
    
  counter = counter + 1
  Form1.Text1.Text = counter / 100

End Function


もげ  2006-10-24 01:34:33  No: 133811

>Private Sub exit_button_Click()
>  End
>End Sub

うーん。参考にされるのであれば、この辺を。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200607/06070042.txt


我龍院  2006-10-24 16:34:13  No: 133812

VB6になって(VB5では使えた)マルチスレッドに新たな制限が加わり、
殆ど使用できなくなりました。
対策として、
1、マルチメディアタイマーを使用しないで、TimeGetTime等で間に合わす。
2、マルチメディアタイマーを使った場合、ネイティブをやめてP-Codeコンパイルを使う。
3、マルチメディアタイマーを使用時はコールバックルーチンを使用しない。
要するに良い方法が無いということです。(^^;

#Visual Basic 2005ではBackground Workerと言うのが有って、
簡単なマルチスレッドなら"簡単"に出来ます。(^^


ごつごっつ  2006-10-24 20:47:25  No: 133813

もげさん,我龍院さんご回答ありがとうございます.
timeSetEventではうまくいかない仕様になっていたんですね.

教えていただいた別の方法を使ってなんとかやってみたいと思います


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加