我想知道編寫應用程序的最佳方式是什麼。基本上,我有一個多線程運動模擬項目,可以同時執行不同的遊戲模擬。編程一個長時間運行的基於時間的過程
我將我的匹配存儲在附有DateTime的SQLite數據庫中。
我想編寫一個應用程序,每隔一小時左右檢查一次是否需要播放任何新匹配併產生這些線程。
我不能依靠任務計劃程序每小時執行一次,因爲存在該進程的不同實例將共享的對象(特別是比賽對象),我懷疑在保存時會被新的進程覆蓋回到DB中。所以理想情況下,我需要編寫一些長時間睡眠的過程,可以在幾個小時之內休息。
我寫過我的對象模型,以便每個對象只從內存中加載一次,所以只要所有的仿真線程都從這個應用程序派生出來,它們就不應該覆蓋數據。
編輯:上要求
更多細節基本上,多個匹配需要能夠同時運行。這些匹配可以是任意長度的,所以不需要一個在另一個開始之前完成(事實上,在大多數情況下,會有多個匹配在同一時間執行)。
我想象的是一個在後臺運行(我猜是服務)的程序,它睡了60分鐘,然後檢查數據庫以查看是否應該啓動任何遊戲。如果有任何要開始,它會啓動線程來模擬這些遊戲,然後重新進入睡眠狀態。因此,仿真線程正在運行,但「調度」線程又睡了60分鐘。
我不能(我認爲)使用默認的操作系統任務調度接口的原因是,這些需要執行的任務被剔除爲一個新的進程。我已經開發了我的數據庫對象模型,使得它們在第一次加載(內存引用)時被每個對象類緩存,這意味着每個對象只從內存加載一次,並且所有的保存都使用該引用。這意味着當每個仿真線程完成並保存其狀態時,將使用相同的參考(更新狀態)來保存狀態。如果每次啓動一個不同的可執行文件,大概每個進程都會打開一個不同的內存引用,因此一個進程可以保存到數據塊中並覆蓋另一個進程寫入的狀態。
服務看起來像要走的路。有沒有辦法讓服務剛好睡60分鐘,然後喚醒並執行一個函數?我覺得這是一個標準的控制檯應用程序會浪費內存,但我不知道是否有一種有效的方式來做到這一點,我不知道。
Linux?使用cron。不是Linux?在...處使用。內置作業功能有什麼問題? – 2010-07-25 22:13:19
你讀過這個問題了嗎?如果可執行文件不止一次啓動,那麼當數據保存回數據庫時,數據將被稍後的過程覆蓋...即,一個匹配的結果將被保存在DB中的聯賽信息中覆蓋。 – sohum 2010-07-25 22:24:05
它是Windows,順便說一句。 – sohum 2010-07-25 22:34:13