none
有關socket使用timer的問題 RRS feed

  • 問題

  • 不好意思,最近在研究使用c#,利用socket寫小型的多人連線遊戲,先說明開發環境
    作業系統版本- Windows Server 2003
    開發工具版本-Visual Studio 2010
    開發環境-Windows Form

    因為在爬文時候發現,有分為Windows.Forms.Timer、System.Threading.Timer
    有高手說使用Windows.Forms.Timer會有時間delay問題產生。

    想請問各位高手,在使用socket情況下,使用System.Threading.Timer是否較好?
    因為遊戲上每位client端要顯示遊戲的剩餘時間,那要如何將每位client端的剩餘時間同步,避免每位client端的時間有落差?

    不好意思,才疏學淺,麻煩各位高手解惑,實在感恩。
    2012年2月16日 下午 04:43

解答

  • 三種時間人《.NET中的Timer(1)》

    三種時間人《.NET中的Timer(2)》

    三種時間人《.NET中的Timer(3)》

    不過計算時間 ? 如果你要計算程式進行中兩點間的時間, 用 Stopwatch 類別 比較好吧 ?


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 alice770920 2012年2月17日 下午 01:17
    2012年2月17日 上午 03:33
    版主
  • 無特別設定的原因的話, 所有Timer的 resolution 都會一樣, ex: 在Windows 7 上 Defualt 的 Time resolution 是 15.6ms , 不論哪一個Timer

    不用Forms.Timer 的原因在於它的Tick 事件委派函式會在 UI 緒中進行,  如果Tick 中的計算頗多, 會影響UI 緒的事件幫浦.

    你的程式不是我寫的, 我沒有辦法告訴你百分百用什麼是對的, 但就我自己的經驗, 在Timer 的選擇中通常我會優先選擇 Threading.Timer , 因為它是多緒且最輕量.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 alice770920 2012年2月17日 下午 01:17
    2012年2月17日 上午 10:38
    版主

所有回覆

  • 三種時間人《.NET中的Timer(1)》

    三種時間人《.NET中的Timer(2)》

    三種時間人《.NET中的Timer(3)》

    不過計算時間 ? 如果你要計算程式進行中兩點間的時間, 用 Stopwatch 類別 比較好吧 ?


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 alice770920 2012年2月17日 下午 01:17
    2012年2月17日 上午 03:33
    版主
  • 您好:

    謝謝您提供的網頁:)
    這遊戲是要4人開一間房間進行一場比賽,類似神來也的遊戲。
    開始比賽時候時間會開始倒數,當時間到的時候,則停止比賽。

    想說在使用socket情況下,怕每位玩家因為網路關係時間不同步,使用System.Threading.Timer才是正確的嗎?

    2012年2月17日 上午 07:25
  • 無特別設定的原因的話, 所有Timer的 resolution 都會一樣, ex: 在Windows 7 上 Defualt 的 Time resolution 是 15.6ms , 不論哪一個Timer

    不用Forms.Timer 的原因在於它的Tick 事件委派函式會在 UI 緒中進行,  如果Tick 中的計算頗多, 會影響UI 緒的事件幫浦.

    你的程式不是我寫的, 我沒有辦法告訴你百分百用什麼是對的, 但就我自己的經驗, 在Timer 的選擇中通常我會優先選擇 Threading.Timer , 因為它是多緒且最輕量.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 alice770920 2012年2月17日 下午 01:17
    2012年2月17日 上午 10:38
    版主
  • 實在很謝謝您的寶貴意見:)
    2012年2月17日 下午 01:18