OSDN Git Service

#28938 コンパクトモードでの起動時、「stage起動」の処理を省略することで、起動を高速化。
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Sat, 7 Jul 2012 18:20:28 +0000 (18:20 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Sat, 7 Jul 2012 18:20:28 +0000 (18:20 +0000)
#28939 システムタイマの割り込み間隔を、DTXManiaの動作中に限り、デフォルトの10~15msから、1msもしくは設定可能な最低値に変更。

git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@440 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXManiaプロジェクト/コード/全体/CDTXMania.cs

index 1222a77..6d726bb 100644 (file)
@@ -283,7 +283,9 @@ namespace DTXMania
                        get;\r
                        set;\r
                }\r
-\r
+               private static TimeCaps timecaps;\r
+               private bool bChangedtimePeriod = false;\r
+               //              public static CTimer ct;\r
 \r
                // コンストラクタ\r
 \r
@@ -480,7 +482,10 @@ namespace DTXMania
                                CScoreIni scoreIni = null;\r
 \r
                                #region [ 曲検索スレッドの起動/終了 ]                                       // ここに"Enumerating Songs..."表示を集約\r
-                               actEnumSongs.On進行描画();                                                          // "Enumerating Songs..."アイコンの描画\r
+                               if ( !CDTXMania.bコンパクトモード )\r
+                               {\r
+                                       actEnumSongs.On進行描画();                                                  // "Enumerating Songs..."アイコンの描画\r
+                               }\r
                                switch ( r現在のステージ.eステージID )\r
                                {\r
                                        case CStage.Eステージ.タイトル:\r
@@ -1533,6 +1538,31 @@ for (int i = 0; i < 3; i++) {
                        }\r
                        //---------------------\r
                        #endregion\r
+                       #region [ アプリケーションの最小タイマ分解能を設定する ]\r
+                       //---------------------\r
+                       Trace.TraceInformation( "アプリケーションの最小タイマ分解能を設定します。" );\r
+                       Trace.Indent();\r
+                       try\r
+                       {\r
+                               timecaps = new TimeCaps();\r
+                               if ( timeGetDevCaps( out timecaps, (uint) Marshal.SizeOf( typeof( TimeCaps ) ) ) != 0 )\r
+                               {\r
+                                       Trace.TraceInformation( "timeGetDevCaps()に失敗しました。タイマ分解能は変更せず続行します。" );\r
+                               }\r
+                               else\r
+                               {\r
+                                       timeBeginPeriod( timecaps.wPeriodMin );\r
+                                       Trace.TraceInformation( "最小タイマ分解能指定を完了しました。" );\r
+                                       bChangedtimePeriod = true;\r
+                               }\r
+                       }\r
+                       finally\r
+                       {\r
+                               Trace.Unindent();\r
+                       }\r
+                       #endregion\r
+//                     ct = new CTimer( CTimer.E種別.PerformanceCounter );\r
+                       //-----------\r
                        #region [ Timer の初期化 ]\r
                        //---------------------\r
                        Trace.TraceInformation( "タイマの初期化を行います。" );\r
@@ -1801,7 +1831,14 @@ for (int i = 0; i < 3; i++) {
                        Trace.TraceInformation( "----------------------" );\r
                        Trace.TraceInformation( "■ 起動" );\r
 \r
-                       r現在のステージ = stage起動;\r
+                       if ( CDTXMania.bコンパクトモード )\r
+                       {\r
+                               r現在のステージ = stage曲読み込み;\r
+                       }\r
+                       else\r
+                       {\r
+                               r現在のステージ = stage起動;\r
+                       }\r
                        r現在のステージ.On活性化();\r
                        //---------------------\r
                        #endregion\r
@@ -2042,6 +2079,9 @@ for (int i = 0; i < 3; i++) {
                                }\r
                                //---------------------\r
                                #endregion\r
+\r
+//                             ct.Dispose();\r
+\r
                                #region [ タイマの終了処理 ]\r
                                //---------------------\r
                                Trace.TraceInformation("タイマの終了処理を行います。");\r
@@ -2065,6 +2105,25 @@ for (int i = 0; i < 3; i++) {
                                }\r
                                //---------------------\r
                                #endregion\r
+                               #region [ アプリケーションの最小タイマ分解能設定を解除する ]\r
+                               //---------------------\r
+                               if ( bChangedtimePeriod )\r
+                               {\r
+                                       Trace.TraceInformation( "アプリケーションの最小タイマ分解能設定を解除します。" );\r
+                                       Trace.Indent();\r
+                                       try\r
+                                       {\r
+                                               timeEndPeriod( timecaps.wPeriodMin );\r
+                                               Trace.TraceInformation( "最小タイマ分解能設定を解除しました。" );\r
+                                       }\r
+                                       finally\r
+                                       {\r
+                                               Trace.Unindent();\r
+                                       }\r
+                               }\r
+                               //-----------\r
+                               #endregion\r
+\r
                                #region [ Config.iniの出力 ]\r
                                //---------------------\r
                                Trace.TraceInformation("Config.ini を出力します。");\r
@@ -2296,5 +2355,24 @@ for (int i = 0; i < 3; i++) {
                \r
                //-----------------\r
                #endregion\r
+\r
+               #region [ DllImport ]\r
+               //-----------------\r
+               [DllImport( "winmm.dll" )]\r
+               private static extern void timeBeginPeriod( uint x );\r
+               [DllImport( "winmm.dll" )]\r
+               private static extern void timeEndPeriod( uint x );\r
+               [DllImport( "winmm.dll" )]\r
+               private static extern uint timeGetDevCaps( out TimeCaps timeCaps, uint size );\r
+\r
+               [StructLayout( LayoutKind.Sequential )]\r
+               private struct TimeCaps\r
+               {\r
+                       public uint wPeriodMin;\r
+                       public uint wPeriodMax;\r
+               }\r
+               //-----------------\r
+               #endregion\r
+\r
        }\r
 }\r