5

.NETには 3 つのタイマー タイプがあることを認識しています ( Comparing the Timer Classes in the .NET Framework Class Libraryを参照)。メインスレッドがビジー状態の場合、他のタイプがドリフトする可能性があるため、スレッド化されたタイマーを選択しました。信頼できるものにする必要があります。

タイマーの制御でこのタイマーが機能する方法は別のスレッドに置かれるため、親スレッドがビジーでない場合は、親スレッドで完了した作業の開始に合わせて常に時を刻むことができます。

コンソール アプリケーションでのこのタイマーの問題は、タイマーが別のスレッドで動作している間、メイン スレッドが何もしていないため、アプリケーションが閉じてしまうことです。

while trueループを追加しようとしましたが、タイマーがオフになるとメイン スレッドがビジー状態になります。

4

1 に答える 1

4

すべてのスレッドが完了するまで待機するバリアを使用します。メインスレッドとカウントスレッドがあるので、2人の参加者がいます。したがって、次のようになります。

 Module Module1
        Dim x As New Threading.Thread(AddressOf tick)
        Dim y As New Threading.Barrier(2)

        Sub Main()
            x.IsBackground = True
            x.Start()
            y.SignalAndWait()
        End Sub

        Sub tick()
            Threading.Thread.Sleep(10000)
            y.SignalAndWait()
        End Sub
    End Module
于 2012-12-27T04:12:54.610 に答える