我怎樣才能限制計時器線程執行時間?我長時間運行定時器工作,應該不超過30秒。限制計時器線程執行時間
回答
做到這一點的唯一方法是讓第二個線程(可能創建工作線程的)監控,然後殺死它或優雅地調用它立即退出。殺死線程你應該避免,並且只能作爲最後的手段使用。下面是例子,如何:
Thread t = new Thread(myLongThreadProc);
t.Start();
Thread.Sleep(30000);
t.Abort();
通過「優雅地把它放棄」,我的意思是設置一些stop變量爲某個值,並給出了一些線索很短的時間退出本身,否則你殺了它。但它是你的線程函數的設計,使其實際上退出。下面是示例代碼:
Thread t = new Thread(myLongThreadProc);
threadRun = true;
t.Start();
Thread.Sleep(30000);
threadRun = false; //this variable is monitored by thread
if (!t.Join(1000)) //inside your thread, make sure it does quit in one second
{ //when this variable is set to false
t.Abort();
}
而且我要指出,你的程序線程沒有進入睡眠狀態30秒,但你可以用一個定時器來代替(如果它是一個形式線程),或者做一些有用的東西,並定期檢查 - 或有第三個工作線程只是計算30數秒
贊同反對殺死線程的觀點。 –
無需爲此啓動一個單獨的線程。這是一個巨大的資源浪費。如果啓動後臺線程的線程要等待退出,爲什麼要啓動一個線程呢?最好使用一次性定時器,並讓回調函數指示另一個線程停止。 –
只要有您的輔助方法開始一個30秒的計時器和檢查,看看它是否經過作爲你的工人做的事情:
bool timerElapsed;
public void DoWork()
{
timerElapsed=false;
System.Timers.Timer timer = new System.Timers.Timer(30000);
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Start();
while (true)
{
if (timerElapsed)
{
// handle 30-sec elasped error
break;
}
// continue doing work and break when done
}
timer.Stop();
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timerElapsed = true;
}
爲什麼要使用一個計時器,當你可以只用'變種SW = Stopwatch.StartNew()',然後有你的迴路校驗'sw.ElapsedMilliseconds> 30000'? –
@Mim米契爾 - 檢查經過的時間可以工作一樣好(順便說一句,你爲什麼不提供,作爲一個答案?)但是,如果OP的代碼很複雜,可能是簡單的貶謫經過檢查計時器。 –
- 1. PHP - 執行時間限制
- 2. didReceiveNotificationRequest:withContentHandler - 執行時間限制?
- 3. 在沒有線程的情況下限制Java執行時間
- 4. 限制執行時間在java中的線程樣本
- 5. 線程 - 執行時間
- 6. Python:線程執行時間
- 7. 限制時間表的計時器?
- 8. 限制SharePoint定時器作業中的執行時間?
- 9. scraperwiki如何限制執行時間?
- 10. 擴大PHP執行時間限制
- 11. 限制php的執行時間
- 12. 「真正」 的執行時間限制
- 13. 執行Java函數的時間限制
- 14. 限制函數執行時間
- 15. 如何限制線程的執行時間並在運行時間過長時終止它?
- 16. 輸入線程的時間限制
- 17. 等待線程加入時間限制
- 18. 時間戳計數器限制
- 19. 從具有時間限制的程序執行程序(Java)
- 20. 測量java短時間運行的線程執行時間
- 21. 限制scalatest並行執行線程號
- 22. 測量多線程的執行時間
- 23. 多線程執行時間最小化
- 24. 線程執行指定的時間。
- 25. C/Linux中的線程執行時間
- 26. C++線程的執行時間和執行線程在另一個線程
- 27. Scala執行時間計數器
- 28. 線程運行時計數器的值沒有被執行
- 29. 程序執行的時間計算?
- 30. 計算Java程序的執行時間
你不能直接做到這一點 - 你有某種循環,你可以檢查t他流逝的時間,在線程本身? –
不是重複,但相關:http://stackoverflow.com/questions/299198/implement-c-sharp-generic-timeout –
@ShadowWizard我沒有在計時器線程循環,任何想法? – kseen