2014-11-07 80 views
0

我想運行方法_doing(),無限循環直到觸發shutdownEvent。這基本上是在new Thread()上執行/啓動的。但我不需要_doSomething如果它是true某處。 if (_doSomething)後應該怎麼辦?下面的代碼片段。謝謝。使用do-while並跳過下一行

private HighResolutionLapseTimer _lapseTimer; 

private int _timeToNext 
{ 
    get 
    { 
     int lapseTime = _lapseTimer.LapseTime(); 
     int next = DO_PERIOD - lapseTime; 

     if (next > 0) 
     { 
      return next; 
     } 
     else 
     { 
      return 1; 
     } 
    } 
} 

int DO_PERIOD = 60000; 

private void _doing() 
{ 
    int _nextDoing = DO_PERIOD; 
    Thread.Sleep(_nextDoing); 

    do 
    { 
     LogInfo("Starting _doing"); 
     lock (this) 
     { 
      if (_doSomething) 
      { 
       // skip this time because we are currently archiving 
      } 
      _doSomething = true; 
     } 

     try 
     { 
      _lapseTimer.Start(); 
      DoSomethingHere(); //takes long processing 
     } 
     catch (Exception ex) 
     { 
      LogException(ex); 
     } 
     finally 
     { 
      lock (this) 
      { 
       _nextDoing = (int)_timeToNext; 
       _doSomething = false; 
      } 
     } 
    } while (!shutdownWaitHandle.WaitOne(_nextDoing, false)); 

    LogInfo("Stopping _doing"); 
} 
+2

似乎你基本上有它;你的代碼有什麼問題? – BradleyDotNET 2014-11-07 01:15:42

+0

老實說,我不知道把什麼放在if語句下面。它在上面評論。前面的代碼使用'Timer'類,所以基本上它只是'return',並且什麼都不做,但是我想將'Timer_Elapsed'事件的實現更改爲單個線程函數,但我不知道如何使用閉環實現它。 – junPac 2014-11-07 01:20:24

回答

2

您可以使用continue;聲明。

+1

感謝兄弟。我也剛剛意識到它。謝謝! – junPac 2014-11-07 01:23:35

+0

沒有probs,有時寫解決方案出現的問題。 :) – Lunster 2014-11-07 01:26:12

0

Ohw!我剛剛意識到do-while類似於while。而'跳過'的執行,你只需要使用continue;如果if statement爲真