VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2007/01/09(Tue) 13:43
投稿者GOD
Eメール
URL
タイトルRe^5: タイマーイベント中に処理が止まる

> > そもそも、タイマーイベントを止めないようにしたいのか?
> > 同時に並行処理をしたいのかどちらなのでしょうか?
> > (過去の掲示板での話は、前記での場合での前提の話かと思うので)
> >
> > VB6.0 では、マルチスレッド(詳しくは検索して調べて下さい)は無理なようなので...。
> > 本格的な並行処理をしたいなら、VB.NET 系に移行して下さい。
>
> 起動から終了までタイマーイベントを発生させ続けたいので、並行処理が望ましいです。
> VB6.0での並行処理を諦めて実行ファイルを2個にして対応したいと思います。
> ありがとうございました。
>
解決しているけど他の方法としてフラグで処理分割してもよさそう。
(DoEventsを使用せずにこまめにタイマー割込みを終了させる。)
DoEventsしたいところで必要情報を外部変数に格納して一度タイマーを抜ける。次回タイマー発生時に続きから処理する。
Intervalは適当に。

'FormB
Private flg As Long

Private Sub Form_Load()
    flg = 0
    Timer1.Interval = 1000
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
    Select Case flg
    Case 0
        '処理 A
    Case 1
        '処理 B
    Case 2
        '処理 C
    End Select
    flg = (flg + 1) Mod 3
End Sub

'ループさせているのなら↓見たいになるかな。
Private Sub Timer2_Timer()
    Dim i As Long

'    For i = 0 To 10000000
'        '処理
'        If (i Mod 10000) = 0 Then
'            FormA.Label1 = i
'            DoEvents
'        End If
'    Next

    For i = flg To flg + 9999
        '処理
    Next
    flg = i
    FormA.Label1 = flg
    flg = flg Mod 10000000
End Sub


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -