2017-10-02 8 views
3

Trueを返すか、設定された時間が経過するまで、再実行する必要があるメソッドがあります。キャンセルトークンはこれを行う方法でしょうか?ストップウォッチ?タイマー?Trueを返すか、15秒を経過するまで関数を実行する

Do While partReady = False 
     partReady = readTag(part, "_IO_EM_DI_04") 
    Loop 

返されるまで実行しますが、キャンセルして例外をスローしたり、一定時間後にループを終了する必要があります。

答えて

3

使用Stopwatchは:

Dim sw As New Stopwatch 
    sw.Start() 

    Do While partReady = False 
     partReady = readTag(part, "_IO_EM_DI_04") 
     If sw.Elapsed.TotalSeconds >= 15 Then 
      Exit Do 
     End If 
    Loop 
+0

これは簡単でした。私はこれを撃つつもりで、もしそれがすべて良ければあなたを答えとしてマークします。ありがとう。 – AlexF11

+0

たとえば、 'TotalSeconds'の値が14から16にスキップされる場合、これは失敗する可能性があります。' readTag'メソッドが予期しない時間がかかる場合に起こります。その状態を処理するには、 'TotalSeconds> = 15'をチェックする方が良いでしょう。私はまた、「TotalSeconds」が「Double」であることに気付きました。あなたがそれをチェックしたときに正確に15ではないかもしれません。 –

+0

@ChrisDunaway私は修正しました、ありがとうございます。 – codeDom

0

私はあなたの質問からループの内容は、タイマのElapsedイベントに移動されている場合、ここでタイマーを使用します。これにより、タイマーが頻繁に実行される頻度に基づいてCPU使用率を調整し、CPUコアでループが逃げないようにすることができます。

関連する問題